SYMBOL INDEX (4930 symbols across 154 files) FILE: integration_tests/cluster_cli/manifest.py class ClusterFixture (line 14) | class ClusterFixture: function manifest_path (line 24) | def manifest_path() -> Path: function load_fixture_manifest (line 28) | def load_fixture_manifest() -> list[ClusterFixture]: function fixture_by_id (line 47) | def fixture_by_id(fixture_id: str) -> ClusterFixture: function magnet_info_hash_hex (line 54) | def magnet_info_hash_hex(magnet_uri: str) -> str: function torrent_info_hash_hex (line 66) | def torrent_info_hash_hex(torrent_path: Path) -> str: function _extract_top_level_info_bytes (line 71) | def _extract_top_level_info_bytes(data: bytes) -> bytes: function _parse_any (line 84) | def _parse_any(data: bytes, index: int) -> tuple[Any, int]: function _parse_int (line 97) | def _parse_int(data: bytes, index: int) -> tuple[int, int]: function _parse_bytes (line 102) | def _parse_bytes(data: bytes, index: int) -> tuple[bytes, int]: function _parse_list (line 110) | def _parse_list(data: bytes, index: int) -> tuple[list[Any], int]: function _parse_dict (line 119) | def _parse_dict(data: bytes, index: int) -> tuple[dict[bytes, Any], int]: FILE: integration_tests/cluster_cli/runner.py class ClusterCliError (line 30) | class ClusterCliError(RuntimeError): function _utc_stamp (line 34) | def _utc_stamp() -> str: class ContainerNode (line 39) | class ContainerNode: class ClusterRunContext (line 45) | class ClusterRunContext: function run_cluster_cli_smoke (line 61) | def run_cluster_cli_smoke(run_id: str | None = None, skip_build: bool = ... function _prepare_context (line 96) | def _prepare_context(run_id: str) -> ClusterRunContext: function _write_toml (line 148) | def _write_toml(path: Path, payload: dict[str, Any]) -> None: function _docker_json (line 153) | def _docker_json( function _compose_start (line 196) | def _compose_start(ctx: ClusterRunContext, services: list[str], *, no_bu... function _compose_stop (line 200) | def _compose_stop(ctx: ClusterRunContext, service: str) -> None: function _snapshot_shared_root (line 204) | def _snapshot_shared_root(ctx: ClusterRunContext, name: str) -> None: function _capture_artifacts (line 220) | def _capture_artifacts(ctx: ClusterRunContext) -> None: function _stage_fixtures (line 231) | def _stage_fixtures(ctx: ClusterRunContext) -> None: function _seed_shared_config (line 244) | def _seed_shared_config(ctx: ClusterRunContext) -> None: function _phase_shared_offline (line 283) | def _phase_shared_offline(ctx: ClusterRunContext) -> dict[str, Any]: function _phase_single_online (line 323) | def _phase_single_online(ctx: ClusterRunContext, *, no_build: bool) -> d... function _phase_cluster_online (line 365) | def _phase_cluster_online(ctx: ClusterRunContext) -> dict[str, Any]: function _phase_failover (line 395) | def _phase_failover(ctx: ClusterRunContext) -> dict[str, Any]: function _phase_failback (line 411) | def _phase_failback(ctx: ClusterRunContext) -> dict[str, Any]: function _restart_regression_check (line 442) | def _restart_regression_check(ctx: ClusterRunContext) -> dict[str, Any]: function _standalone_completed_event_count (line 499) | def _standalone_completed_event_count(ctx: ClusterRunContext) -> int: function _wait_for_leader (line 506) | def _wait_for_leader(ctx: ClusterRunContext, expected_host_id: str, time... function _wait_for_torrent_presence (line 535) | def _wait_for_torrent_presence( function _wait_for_shared_path (line 556) | def _wait_for_shared_path( function _wait_for_status_torrent_presence (line 584) | def _wait_for_status_torrent_presence( function _wait_for_control_state (line 606) | def _wait_for_control_state( function _wait_for_files (line 627) | def _wait_for_files( function main (line 644) | def main(argv: list[str] | None = None) -> int: FILE: integration_tests/cluster_cli/tests/test_cluster_cli.py function _docker_available (line 14) | def _docker_available() -> bool: function test_cluster_cli_smoke (line 29) | def test_cluster_cli_smoke() -> None: FILE: integration_tests/cluster_cli/tests/test_manifest.py function test_declared_cluster_fixtures_exist_and_match_hashes (line 10) | def test_declared_cluster_fixtures_exist_and_match_hashes() -> None: FILE: integration_tests/docker/tracker.py function bencode (line 16) | def bencode(value: object) -> bytes: class PeerStore (line 36) | class PeerStore: method __init__ (line 37) | def __init__(self) -> None: method update (line 41) | def update(self, info_hash: bytes, peer_id: bytes, ip: str, port: int,... method list_peers (line 50) | def list_peers(self, info_hash: bytes, requester_peer_id: bytes) -> by... class Handler (line 72) | class Handler(BaseHTTPRequestHandler): method _send_bencoded (line 75) | def _send_bencoded(self, payload: dict[str, object], status: int = 200... method do_GET (line 83) | def do_GET(self) -> None: method log_message (line 118) | def log_message(self, fmt: str, *args: object) -> None: FILE: integration_tests/harness/clients/base.py class ClientAdapter (line 7) | class ClientAdapter(ABC): method start (line 9) | def start(self) -> None: method stop (line 13) | def stop(self) -> None: method add_torrent (line 17) | def add_torrent(self, torrent_path: str, download_dir: str) -> None: method wait_for_download (line 21) | def wait_for_download(self, expected_manifest: dict, timeout_secs: int... method collect_logs (line 25) | def collect_logs(self, dest_dir: Path) -> None: FILE: integration_tests/harness/clients/qbittorrent.py class QBittorrentAdapter (line 18) | class QBittorrentAdapter(ClientAdapter): method __init__ (line 19) | def __init__( method _extract_temporary_password (line 40) | def _extract_temporary_password(logs: str) -> str | None: method _login_once (line 48) | def _login_once(self, password: str) -> bool: method authenticate (line 64) | def authenticate(self) -> None: method start (line 96) | def start(self) -> None: method stop (line 101) | def stop(self) -> None: method _request (line 105) | def _request( method _request_json (line 123) | def _request_json(self, path: str) -> Any: method _build_multipart_form (line 130) | def _build_multipart_form( method _torrent_add_succeeded (line 165) | def _torrent_add_succeeded(status: int, response_text: str) -> bool: method _list_torrents (line 187) | def _list_torrents(self) -> list[dict[str, Any]]: method add_torrent (line 197) | def add_torrent(self, torrent_path: str, download_dir: str) -> None: method set_force_start (line 227) | def set_force_start(self, info_hash: str, enabled: bool = True) -> None: method wait_for_download (line 250) | def wait_for_download(self, expected_manifest: dict, timeout_secs: int... method collect_logs (line 269) | def collect_logs(self, dest_dir: Path) -> None: method read_status (line 276) | def read_status(self) -> dict[str, Any]: FILE: integration_tests/harness/clients/superseedr.py class SuperseedrAdapter (line 12) | class SuperseedrAdapter(ClientAdapter): method __init__ (line 13) | def __init__( method start (line 25) | def start(self) -> None: method stop (line 28) | def stop(self) -> None: method add_torrent (line 31) | def add_torrent(self, torrent_path: str, download_dir: str) -> None: method wait_for_download (line 37) | def wait_for_download(self, expected_manifest: dict, timeout_secs: int... method collect_logs (line 46) | def collect_logs(self, dest_dir: Path) -> None: method read_status (line 56) | def read_status(self) -> dict: FILE: integration_tests/harness/clients/transmission.py class TransmissionAdapter (line 15) | class TransmissionAdapter(ClientAdapter): method __init__ (line 16) | def __init__( method start (line 34) | def start(self) -> None: method stop (line 39) | def stop(self) -> None: method _headers (line 43) | def _headers(self) -> dict[str, str]: method _rpc (line 53) | def _rpc(self, method: str, arguments: dict[str, Any] | None = None) -... method wait_until_ready (line 88) | def wait_until_ready(self) -> None: method add_torrent (line 102) | def add_torrent(self, torrent_path: str, download_dir: str) -> None: method _list_torrents (line 117) | def _list_torrents(self) -> list[dict[str, Any]]: method wait_for_download (line 139) | def wait_for_download(self, expected_manifest: dict, timeout_secs: int... method collect_logs (line 155) | def collect_logs(self, dest_dir: Path) -> None: method read_status (line 162) | def read_status(self) -> dict[str, Any]: FILE: integration_tests/harness/config.py class HarnessPaths (line 14) | class HarnessPaths: class HarnessDefaults (line 26) | class HarnessDefaults: function resolve_paths (line 33) | def resolve_paths() -> HarnessPaths: function env_bool (line 46) | def env_bool(name: str, default: bool = False) -> bool: FILE: integration_tests/harness/docker_ctl.py class DockerCompose (line 9) | class DockerCompose: method __init__ (line 10) | def __init__(self, compose_file: Path, project_name: str, env: dict[st... method _cmd (line 15) | def _cmd(self, args: Iterable[str]) -> list[str]: method run (line 26) | def run(self, args: Iterable[str], check: bool = True, capture: bool =... method up (line 35) | def up(self, services: list[str], no_build: bool = False) -> None: method down (line 42) | def down(self) -> None: method ps (line 45) | def ps(self) -> str: method logs (line 49) | def logs(self, service: str, tail: int = 200) -> str: method exec (line 53) | def exec(self, service: str, command: list[str], check: bool = True, c... FILE: integration_tests/harness/manifest.py class ExpectedFile (line 11) | class ExpectedFile: function _sha256_file (line 17) | def _sha256_file(path: Path) -> str: function build_expected_manifest (line 28) | def build_expected_manifest(test_data_root: Path, mode: str) -> dict[str... function validate_output (line 40) | def validate_output(output_root: Path, expected: dict[str, ExpectedFile]... FILE: integration_tests/harness/run.py function parse_args (line 28) | def parse_args() -> argparse.Namespace: function main (line 42) | def main() -> int: FILE: integration_tests/harness/scenarios/qbittorrent_to_superseedr.py class ScenarioResult (line 22) | class ScenarioResult: function _bucket_for_torrent (line 31) | def _bucket_for_torrent(name: str) -> str: function _qbit_savepath_for_torrent (line 41) | def _qbit_savepath_for_torrent(mode: str, name: str) -> str: function _torrent_order_key (line 49) | def _torrent_order_key(name: str) -> tuple[int, str]: function _expected_subset (line 60) | def _expected_subset(expected: dict[str, ExpectedFile], torrent_names: l... function _write_leech_settings (line 76) | def _write_leech_settings(mode: str, config_path: Path, torrent_files: l... function _prepare_seed_data (line 127) | def _prepare_seed_data(seed_mode_root: Path, canonical_root: Path) -> None: function _ensure_clean_dir (line 137) | def _ensure_clean_dir(path: Path) -> None: function _write_json (line 143) | def _write_json(path: Path, payload: dict) -> None: function _wait_for_tracker (line 148) | def _wait_for_tracker(port: int, timeout_secs: int = 20) -> None: function _reserve_local_port (line 165) | def _reserve_local_port() -> int: function run_mode (line 171) | def run_mode( function generate_fixtures_and_torrents (line 356) | def generate_fixtures_and_torrents(root: Path, announce_url: str) -> Path: FILE: integration_tests/harness/scenarios/superseedr_to_qbittorrent.py class ScenarioResult (line 22) | class ScenarioResult: function _bucket_for_torrent (line 31) | def _bucket_for_torrent(name: str) -> str: function _qbit_savepath_for_torrent (line 41) | def _qbit_savepath_for_torrent(mode: str, name: str) -> str: function _write_seed_settings (line 49) | def _write_seed_settings(mode: str, config_path: Path, torrent_files: li... function _prepare_seed_data (line 100) | def _prepare_seed_data(seed_mode_root: Path, canonical_root: Path) -> None: function _ensure_clean_dir (line 110) | def _ensure_clean_dir(path: Path) -> None: function _write_json (line 116) | def _write_json(path: Path, payload: dict) -> None: function _wait_for_tracker (line 121) | def _wait_for_tracker(port: int, timeout_secs: int = 20) -> None: function _reserve_local_port (line 138) | def _reserve_local_port() -> int: function run_mode (line 144) | def run_mode( function generate_fixtures_and_torrents (line 306) | def generate_fixtures_and_torrents(root: Path, announce_url: str) -> Path: FILE: integration_tests/harness/scenarios/superseedr_to_superseedr.py class ScenarioResult (line 19) | class ScenarioResult: function _bucket_for_torrent (line 28) | def _bucket_for_torrent(name: str) -> str: function _write_settings (line 38) | def _write_settings(mode: str, role: str, config_path: Path, torrent_fil... function _prepare_seed_data (line 90) | def _prepare_seed_data(seed_mode_root: Path, canonical_root: Path) -> None: function _ensure_clean_dir (line 100) | def _ensure_clean_dir(path: Path) -> None: function _write_json (line 106) | def _write_json(path: Path, payload: dict) -> None: function _wait_for_tracker (line 111) | def _wait_for_tracker(port: int, timeout_secs: int = 20) -> None: function run_mode (line 128) | def run_mode( function generate_fixtures_and_torrents (line 269) | def generate_fixtures_and_torrents(root: Path, announce_url: str) -> Path: FILE: integration_tests/harness/scenarios/superseedr_to_transmission.py class ScenarioResult (line 23) | class ScenarioResult: function _bucket_for_torrent (line 32) | def _bucket_for_torrent(name: str) -> str: function _transmission_savepath_for_torrent (line 42) | def _transmission_savepath_for_torrent(mode: str, name: str) -> str: function _write_seed_settings (line 50) | def _write_seed_settings(mode: str, config_path: Path, torrent_files: li... function _prepare_seed_data (line 101) | def _prepare_seed_data(seed_mode_root: Path, canonical_root: Path) -> None: function _ensure_clean_dir (line 111) | def _ensure_clean_dir(path: Path) -> None: function _write_json (line 117) | def _write_json(path: Path, payload: dict) -> None: function _wait_for_tracker (line 122) | def _wait_for_tracker(port: int, timeout_secs: int = 20) -> None: function _reserve_local_port (line 139) | def _reserve_local_port() -> int: function run_mode (line 145) | def run_mode( function generate_fixtures_and_torrents (line 319) | def generate_fixtures_and_torrents(root: Path, announce_url: str) -> Path: FILE: integration_tests/harness/scenarios/transmission_to_superseedr.py class ScenarioResult (line 23) | class ScenarioResult: function _bucket_for_torrent (line 32) | def _bucket_for_torrent(name: str) -> str: function _transmission_savepath_for_torrent (line 42) | def _transmission_savepath_for_torrent(mode: str, name: str) -> str: function _write_leech_settings (line 50) | def _write_leech_settings(mode: str, config_path: Path, torrent_files: l... function _prepare_seed_data (line 101) | def _prepare_seed_data(seed_mode_root: Path, canonical_root: Path) -> None: function _ensure_clean_dir (line 111) | def _ensure_clean_dir(path: Path) -> None: function _write_json (line 117) | def _write_json(path: Path, payload: dict) -> None: function _wait_for_tracker (line 122) | def _wait_for_tracker(port: int, timeout_secs: int = 20) -> None: function _reserve_local_port (line 139) | def _reserve_local_port() -> int: function run_mode (line 145) | def run_mode( function generate_fixtures_and_torrents (line 319) | def generate_fixtures_and_torrents(root: Path, announce_url: str) -> Path: FILE: integration_tests/harness/tests/test_manifest.py function test_build_expected_manifest_skips_v1_only_for_non_v1 (line 8) | def test_build_expected_manifest_skips_v1_only_for_non_v1(tmp_path: Path... function test_validate_output_detects_missing_and_extra (line 21) | def test_validate_output_detects_missing_and_extra(tmp_path: Path) -> None: FILE: integration_tests/harness/tests/test_qbittorrent_auth_interop.py function _reserve_local_port (line 15) | def _reserve_local_port() -> int: function test_qbittorrent_container_and_auth (line 24) | def test_qbittorrent_container_and_auth() -> None: FILE: integration_tests/harness/tests/test_qbittorrent_to_superseedr_interop.py function test_qbittorrent_to_superseedr_interop_mode (line 13) | def test_qbittorrent_to_superseedr_interop_mode(mode: str) -> None: FILE: integration_tests/harness/tests/test_stub_adapters.py function test_qbittorrent_temporary_password_extraction (line 12) | def test_qbittorrent_temporary_password_extraction() -> None: function test_qbittorrent_temporary_password_extraction_case_insensitive (line 17) | def test_qbittorrent_temporary_password_extraction_case_insensitive() ->... function test_qbittorrent_temporary_password_extraction_missing (line 22) | def test_qbittorrent_temporary_password_extraction_missing() -> None: class _QbittorrentLoginResponse (line 27) | class _QbittorrentLoginResponse: method __init__ (line 28) | def __init__(self, status: int, body: bytes) -> None: method __enter__ (line 32) | def __enter__(self) -> "_QbittorrentLoginResponse": method __exit__ (line 35) | def __exit__(self, *_args: object) -> None: method read (line 38) | def read(self) -> bytes: function test_qbittorrent_login_accepts_legacy_ok_body (line 42) | def test_qbittorrent_login_accepts_legacy_ok_body(monkeypatch: pytest.Mo... function test_qbittorrent_login_accepts_empty_204 (line 53) | def test_qbittorrent_login_accepts_empty_204(monkeypatch: pytest.MonkeyP... function test_qbittorrent_login_rejects_failed_200 (line 64) | def test_qbittorrent_login_rejects_failed_200(monkeypatch: pytest.Monkey... function test_qbittorrent_authenticate_falls_back_to_temp_password (line 75) | def test_qbittorrent_authenticate_falls_back_to_temp_password(monkeypatc... function test_qbittorrent_authenticate_retries_temp_password_until_ready (line 98) | def test_qbittorrent_authenticate_retries_temp_password_until_ready(monk... function test_qbittorrent_build_multipart_form_includes_file_and_fields (line 127) | def test_qbittorrent_build_multipart_form_includes_file_and_fields() -> ... function test_qbittorrent_add_torrent_posts_to_api (line 141) | def test_qbittorrent_add_torrent_posts_to_api(monkeypatch: pytest.Monkey... function test_qbittorrent_add_torrent_accepts_json_success (line 163) | def test_qbittorrent_add_torrent_accepts_json_success( function test_qbittorrent_add_torrent_rejects_json_failure (line 184) | def test_qbittorrent_add_torrent_rejects_json_failure( function test_qbittorrent_wait_for_download_success (line 206) | def test_qbittorrent_wait_for_download_success(monkeypatch: pytest.Monke... function test_qbittorrent_wait_for_download_error_state (line 222) | def test_qbittorrent_wait_for_download_error_state(monkeypatch: pytest.M... function test_transmission_add_torrent_sends_metainfo (line 233) | def test_transmission_add_torrent_sends_metainfo(monkeypatch: pytest.Mon... function test_transmission_wait_for_download_success (line 256) | def test_transmission_wait_for_download_success(monkeypatch: pytest.Monk... function test_transmission_wait_for_download_error_state (line 271) | def test_transmission_wait_for_download_error_state(monkeypatch: pytest.... FILE: integration_tests/harness/tests/test_superseedr_interop.py function test_superseedr_interop_mode (line 13) | def test_superseedr_interop_mode(mode: str) -> None: FILE: integration_tests/harness/tests/test_superseedr_to_qbittorrent_interop.py function test_superseedr_to_qbittorrent_interop_mode (line 13) | def test_superseedr_to_qbittorrent_interop_mode(mode: str) -> None: FILE: integration_tests/harness/tests/test_superseedr_to_transmission_interop.py function test_superseedr_to_transmission_interop_mode (line 13) | def test_superseedr_to_transmission_interop_mode(mode: str) -> None: FILE: integration_tests/harness/tests/test_transmission_auth_interop.py function _reserve_local_port (line 14) | def _reserve_local_port() -> int: function test_transmission_container_and_auth (line 23) | def test_transmission_container_and_auth() -> None: FILE: integration_tests/harness/tests/test_transmission_to_superseedr_interop.py function test_transmission_to_superseedr_interop_mode (line 13) | def test_transmission_to_superseedr_interop_mode(mode: str) -> None: FILE: scripts/clear_integration_output.py function parse_args (line 16) | def parse_args() -> argparse.Namespace: function clear_mode (line 37) | def clear_mode(mode: str, dry_run: bool) -> tuple[int, int]: function main (line 79) | def main() -> int: FILE: scripts/generate_integration_bins.py function expected_bytes (line 73) | def expected_bytes(seed_key: str, size: int) -> bytes: function sha256_hex (line 84) | def sha256_hex(data: bytes) -> str: function check_specs (line 88) | def check_specs() -> tuple[bool, int]: function generate_specs (line 116) | def generate_specs() -> int: function parse_args (line 129) | def parse_args() -> argparse.Namespace: function main (line 146) | def main() -> int: FILE: scripts/generate_integration_torrents.py class BencodeError (line 33) | class BencodeError(ValueError): function bdecode (line 37) | def bdecode(data: bytes) -> object: function _decode_at (line 44) | def _decode_at(data: bytes, i: int) -> tuple[object, int]: function bencode (line 82) | def bencode(value: object) -> bytes: function normalize_announce (line 103) | def normalize_announce(payload: dict[bytes, object], announce_url: str) ... function rewrite_announce (line 109) | def rewrite_announce(src_path: Path, dest_path: Path, announce_url: str)... function write_v1_single_file_torrent_manual (line 118) | def write_v1_single_file_torrent_manual( function generate_v1_torrents (line 147) | def generate_v1_torrents(test_data_root: Path, output_root: Path, announ... function copy_and_normalize_existing_modes (line 183) | def copy_and_normalize_existing_modes( function verify_announce (line 195) | def verify_announce(output_root: Path, announce_url: str) -> tuple[bool,... function parse_args (line 213) | def parse_args() -> argparse.Namespace: function main (line 223) | def main() -> int: FILE: scripts/hash.py function calculate_merkle_root (line 11) | def calculate_merkle_root(): FILE: scripts/summarize_dht_soak.py function load_samples (line 35) | def load_samples(path: Path) -> list[dict[str, Any]]: function lines_in_window (line 49) | def lines_in_window(path: Path, start: str | None, end: str | None) -> l... function sum_field (line 61) | def sum_field(lines: list[str], field: str) -> tuple[int, int]: function some_field (line 75) | def some_field(line: str, field: str) -> str | None: function int_some_field (line 82) | def int_some_field(line: str, field: str) -> int | None: function bool_some_field (line 89) | def bool_some_field(line: str, field: str) -> bool | None: function count_some_values (line 98) | def count_some_values(lines: list[str], field: str) -> dict[str, int]: function average_int_field (line 108) | def average_int_field(lines: list[str], field: str) -> float | None: function summarize_samples (line 119) | def summarize_samples(samples: list[dict[str, Any]]) -> dict[str, Any]: function summarize_log (line 152) | def summarize_log(lines: list[str]) -> dict[str, Any]: function cleanup (line 261) | def cleanup(args: argparse.Namespace) -> dict[str, Any]: function parse_args (line 282) | def parse_args() -> argparse.Namespace: function assert_thresholds (line 319) | def assert_thresholds(summary: dict[str, Any], args: argparse.Namespace)... function main (line 349) | def main() -> None: FILE: scripts/validate_integration_output.py function sha256_file (line 21) | def sha256_file(path: Path) -> str: function collect_files (line 32) | def collect_files(root: Path) -> dict[str, Path]: function validate_mode (line 46) | def validate_mode( function parse_args (line 106) | def parse_args() -> argparse.Namespace: function main (line 132) | def main() -> int: FILE: src/app.rs function format_filesystem_path_error (line 121) | fn format_filesystem_path_error(action: &str, path: &Path, error: &io::E... constant FILE_HANDLE_MINIMUM (line 148) | const FILE_HANDLE_MINIMUM: usize = 64; constant SAFE_BUDGET_PERCENTAGE (line 149) | const SAFE_BUDGET_PERCENTAGE: f64 = 0.85; constant RSS_MAX_TORRENT_DOWNLOAD_BYTES (line 150) | pub const RSS_MAX_TORRENT_DOWNLOAD_BYTES: usize = 10 * 1024 * 1024; constant RSS_MANUAL_DOWNLOAD_TIMEOUT_SECS (line 151) | const RSS_MANUAL_DOWNLOAD_TIMEOUT_SECS: u64 = 20; constant NETWORK_HISTORY_PERSIST_INTERVAL_SECS (line 152) | const NETWORK_HISTORY_PERSIST_INTERVAL_SECS: u64 = 15 * 60; constant WATCH_FOLDER_RESCAN_INTERVAL_SECS (line 153) | const WATCH_FOLDER_RESCAN_INTERVAL_SECS: u64 = 5; constant SHARED_ROLE_RETRY_INTERVAL_SECS (line 154) | const SHARED_ROLE_RETRY_INTERVAL_SECS: u64 = 2; constant STARTUP_ROLLING_BATCH_SIZE (line 155) | const STARTUP_ROLLING_BATCH_SIZE: usize = 1; constant STARTUP_ROLLING_BATCH_INTERVAL_SECS (line 156) | const STARTUP_ROLLING_BATCH_INTERVAL_SECS: u64 = 1; constant STARTUP_ROLLING_LOADS_PER_INTERVAL (line 157) | const STARTUP_ROLLING_LOADS_PER_INTERVAL: usize = 1; constant SHUTDOWN_TIMEOUT_SECS (line 159) | const SHUTDOWN_TIMEOUT_SECS: u64 = 20; constant INCOMING_HANDSHAKE_TIMEOUT_SECS (line 160) | const INCOMING_HANDSHAKE_TIMEOUT_SECS: u64 = 10; constant PORT_FAMILY_HIGHLIGHT_DURATION (line 161) | const PORT_FAMILY_HIGHLIGHT_DURATION: Duration = Duration::from_secs(2); constant UI_FPS_SAMPLE_INTERVAL (line 162) | const UI_FPS_SAMPLE_INTERVAL: Duration = Duration::from_secs(1); constant NORMAL_IDLE_FRAME_CHECK_INTERVAL (line 163) | const NORMAL_IDLE_FRAME_CHECK_INTERVAL: Duration = Duration::from_millis... constant NORMAL_ANIMATION_RECENT_BLOCK_ROWS (line 164) | const NORMAL_ANIMATION_RECENT_BLOCK_ROWS: usize = 64; constant NORMAL_ANIMATION_RECENT_PEER_EVENTS (line 165) | const NORMAL_ANIMATION_RECENT_PEER_EVENTS: usize = 120; constant NORMAL_ANIMATION_FILE_ACTIVITY_WINDOW (line 166) | const NORMAL_ANIMATION_FILE_ACTIVITY_WINDOW: Duration = Duration::from_s... constant SWARM_AVAILABILITY_FLASH_DURATION (line 167) | const SWARM_AVAILABILITY_FLASH_DURATION: Duration = Duration::from_milli... constant DISK_IDLE_WOBBLE_PHASE_SPEED (line 168) | const DISK_IDLE_WOBBLE_PHASE_SPEED: f64 = 0.45; constant DISK_MIN_TRANSFER_PHASE_SPEED (line 169) | const DISK_MIN_TRANSFER_PHASE_SPEED: f64 = 0.80; constant DISK_MAX_TRANSFER_PHASE_SPEED (line 170) | const DISK_MAX_TRANSFER_PHASE_SPEED: f64 = 5.20; constant DISK_WRITE_THROTTLE_START_BYTES_PER_SEC (line 171) | const DISK_WRITE_THROTTLE_START_BYTES_PER_SEC: f64 = 1_000_000_000.0 / 8.0; constant DISK_WRITE_THROTTLE_MIN_BYTES_PER_SEC (line 172) | const DISK_WRITE_THROTTLE_MIN_BYTES_PER_SEC: f64 = 1_000_000.0 / 8.0; constant DISK_WRITE_THROTTLE_WINDOW_TICKS (line 173) | const DISK_WRITE_THROTTLE_WINDOW_TICKS: u8 = 5; constant DISK_WRITE_THROTTLE_STEP_MIN (line 174) | const DISK_WRITE_THROTTLE_STEP_MIN: f64 = 0.80; constant DISK_WRITE_THROTTLE_STEP_MAX (line 175) | const DISK_WRITE_THROTTLE_STEP_MAX: f64 = 1.20; constant DISK_WRITE_THROTTLE_BURST_SECS (line 176) | const DISK_WRITE_THROTTLE_BURST_SECS: f64 = 1.0; constant DISK_WRITE_THROTTLE_TARGET_LATENCY_SECS (line 177) | const DISK_WRITE_THROTTLE_TARGET_LATENCY_SECS: f64 = 2.0; constant BITTORRENT_PROTOCOL_STR (line 178) | const BITTORRENT_PROTOCOL_STR: &[u8] = b"BitTorrent protocol"; type ListenerSet (line 180) | pub struct ListenerSet { method bind (line 186) | async fn bind(port: u16) -> io::Result { method accept (line 235) | async fn accept(&self) -> io::Result<(TcpStream, SocketAddr)> { method local_port (line 252) | fn local_port(&self) -> Option { type CratesResponse (line 262) | struct CratesResponse { type CrateInfo (line 268) | struct CrateInfo { type FilePriority (line 273) | pub enum FilePriority { method next (line 282) | pub fn next(&self) -> Self { type TorrentPreviewPayload (line 293) | pub struct TorrentPreviewPayload { method add_assign (line 307) | fn add_assign(&mut self, rhs: Self) { type TorrentPreviewFileEntry (line 299) | struct TorrentPreviewFileEntry { type BrowserPane (line 317) | pub enum BrowserPane { type FileBrowserMode (line 325) | pub enum FileBrowserMode { type FileMetadata (line 350) | pub struct FileMetadata { type DataRate (line 356) | pub enum DataRate { method as_ms (line 371) | pub fn as_ms(&self) -> u64 { method fps_label (line 385) | pub fn fps_label(self) -> &'static str { method target_fps (line 399) | pub fn target_fps(self) -> f64 { method frame_interval (line 413) | pub fn frame_interval(self) -> Duration { method next_slower (line 418) | pub fn next_slower(&self) -> Self { method next_faster (line 433) | pub fn next_faster(&self) -> Self { type CalculatedLimits (line 449) | pub struct CalculatedLimits { method into_map (line 456) | pub fn into_map(self) -> HashMap { type GraphDisplayMode (line 467) | pub enum GraphDisplayMode { method as_seconds (line 483) | pub fn as_seconds(&self) -> usize { method to_string (line 499) | pub fn to_string(self) -> &'static str { method next (line 515) | pub fn next(&self) -> Self { method prev (line 531) | pub fn prev(&self) -> Self { type ChartPanelView (line 549) | pub enum ChartPanelView { method to_string (line 561) | pub fn to_string(self) -> &'static str { method next (line 573) | pub fn next(self) -> Self { method prev (line 585) | pub fn prev(self) -> Self { type SelectedHeader (line 599) | pub enum SelectedHeader { method default (line 604) | fn default() -> Self { function torrent_sort_header (line 609) | fn torrent_sort_header(column: TorrentSortColumn) -> ColumnId { type AppCommand (line 618) | pub enum AppCommand { type AppRuntimeMode (line 670) | pub enum AppRuntimeMode { method is_shared (line 677) | pub fn is_shared(self) -> bool { method is_shared_follower (line 681) | pub fn is_shared_follower(self) -> bool { type AppClusterRole (line 687) | pub enum AppClusterRole { type ClusterCapabilities (line 693) | struct ClusterCapabilities { type IngestSource (line 703) | enum IngestSource { method relay_archive_extension (line 710) | fn relay_archive_extension(self) -> &'static str { method processed_archive_extension (line 718) | fn processed_archive_extension(self) -> &'static str { type ResolvedAddPayload (line 728) | enum ResolvedAddPayload { type AddIngressAction (line 734) | enum AddIngressAction { type ConfigItem (line 753) | pub enum ConfigItem { type AppMode (line 763) | pub enum AppMode { type AvailabilityTransitionLog (line 776) | type AvailabilityTransitionLog = (String, bool, usize, Option( function ingest_kind_from_path (line 830) | fn ingest_kind_from_path(path: &std::path::Path) -> Option { function event_correlation_id_for_path (line 839) | fn event_correlation_id_for_path(path: &std::path::Path) -> String { type RssScreen (line 844) | pub enum RssScreen { type RssSectionFocus (line 851) | pub enum RssSectionFocus { type TorrentControlState (line 859) | pub enum TorrentControlState { type PeerInfo (line 867) | pub struct PeerInfo { function swarm_availability_counts (line 882) | pub fn swarm_availability_counts(peers: &[PeerInfo], total_pieces: u32) ... type TorrentMetrics (line 898) | pub struct TorrentMetrics { method default (line 944) | fn default() -> Self { type TorrentDisplayState (line 983) | pub struct TorrentDisplayState { type RecentFileActivity (line 1017) | pub struct RecentFileActivity { type SwarmAvailabilityFlashState (line 1023) | pub struct SwarmAvailabilityFlashState { method update (line 1033) | pub fn update( method update_from_peers (line 1051) | pub fn update_from_peers( method update_from_peer_availability (line 1071) | fn update_from_peer_availability( method update_from_availability (line 1113) | fn update_from_availability( method is_piece_flashing (line 1169) | pub fn is_piece_flashing(&self, info_hash: &[u8], piece_index: usize, ... method has_active_flash (line 1185) | pub fn has_active_flash(&self, now: Instant) -> bool { method clear_expired (line 1192) | fn clear_expired(&mut self, now: Instant) { function swarm_availability_flash_rollout_delay (line 1204) | fn swarm_availability_flash_rollout_delay( function swarm_availability_peer_bitfields (line 1222) | fn swarm_availability_peer_bitfields( function swarm_availability_peer_key (line 1237) | fn swarm_availability_peer_key(peer: &PeerInfo, fallback_index: usize) -... type DhtWaveUiState (line 1250) | pub struct DhtWaveUiState { type UiState (line 1265) | pub struct UiState { method record_drawn_frame (line 1293) | fn record_drawn_frame(&mut self, now: Instant) { type ConfigUiState (line 1316) | pub struct ConfigUiState { type DeleteConfirmUiState (line 1324) | pub struct DeleteConfirmUiState { type FileBrowserUiState (line 1330) | pub struct FileBrowserUiState { function build_torrent_preview_tree (line 1338) | pub fn build_torrent_preview_tree( function build_torrent_preview_tree_from_entries (line 1355) | fn build_torrent_preview_tree_from_entries( function collect_torrent_preview_files (line 1387) | fn collect_torrent_preview_files( function rebuild_torrent_preview_tree (line 1407) | fn rebuild_torrent_preview_tree( type JournalFilter (line 1420) | pub enum JournalFilter { method next (line 1429) | pub fn next(self) -> Self { method prev (line 1438) | pub fn prev(self) -> Self { method label (line 1447) | pub fn label(self) -> &'static str { type JournalUiState (line 1458) | pub struct JournalUiState { type RssUiState (line 1466) | pub struct RssUiState { type RssRuntimeState (line 1487) | pub struct RssRuntimeState { type RssFilterRuntimeStat (line 1496) | pub struct RssFilterRuntimeStat { type RssDerivedState (line 1502) | pub struct RssDerivedState { type RssPreviewItem (line 1512) | pub struct RssPreviewItem { type AppState (line 1524) | pub struct AppState { type DiskBackpressureDownloadThrottle (line 1645) | struct DiskBackpressureDownloadThrottle { method new (line 1673) | fn new(configured_download_limit_bps: u64) -> Self { method reset (line 1685) | fn reset(&mut self, configured_download_limit_bps: u64) { method update (line 1695) | fn update(&mut self, sample: DiskBackpressureSample) -> DiskBackpressu... method update_with_step_factor (line 1699) | fn update_with_step_factor( method finish_score_window (line 1737) | fn finish_score_window(&mut self, score: f64, step_factor: f64, ceilin... type DiskBackpressureSample (line 1655) | struct DiskBackpressureSample { type DiskBackpressureDecision (line 1664) | enum DiskBackpressureDecision { function initial_disk_throttle_rate (line 1756) | fn initial_disk_throttle_rate(configured_download_limit_bps: u64) -> f64 { function configured_download_ceiling_bytes_per_sec (line 1761) | fn configured_download_ceiling_bytes_per_sec(configured_download_limit_b... function configured_download_bucket_rate (line 1769) | fn configured_download_bucket_rate(configured_download_limit_bps: u64) -... function configured_upload_bucket_rate (line 1773) | fn configured_upload_bucket_rate(configured_upload_limit_bps: u64) -> f64 { function random_disk_throttle_step_factor (line 1777) | fn random_disk_throttle_step_factor() -> f64 { function normalize_disk_throttle_step (line 1781) | fn normalize_disk_throttle_step(step_factor: f64) -> f64 { function disk_backpressure_score (line 1789) | fn disk_backpressure_score(sample: DiskBackpressureSample) -> f64 { function disk_backpressure_has_signal (line 1795) | fn disk_backpressure_has_signal(sample: DiskBackpressureSample) -> bool { function effective_download_limit_bps (line 1799) | fn effective_download_limit_bps( function bytes_per_sec_to_bps (line 1812) | fn bytes_per_sec_to_bps(bytes_per_sec: f64) -> u64 { function clamp_disk_throttle_rate (line 1820) | fn clamp_disk_throttle_rate(rate_bytes_per_sec: f64, ceiling_bytes_per_s... function disk_throttle_capacity_for_rate (line 1834) | fn disk_throttle_capacity_for_rate(rate_bytes_per_sec: f64) -> f64 { type App (line 1842) | pub struct App { method new (line 2225) | pub async fn new( method new_with_lock (line 2232) | pub async fn new_with_lock( method cluster_role_label_for_state (line 2489) | fn cluster_role_label_for_state(&self) -> Option<&'static str> { method sync_cluster_role_label (line 2503) | fn sync_cluster_role_label(&mut self) { method should_suppress_follower_runtime_for_torrent (line 2512) | fn should_suppress_follower_runtime_for_torrent(&self, torrent: &Torre... method display_state_from_torrent_settings (line 2516) | fn display_state_from_torrent_settings( method ensure_display_only_torrent_from_settings (line 2542) | fn ensure_display_only_torrent_from_settings(&mut self, torrent: &Torr... method apply_leader_snapshot_to_display (line 2556) | fn apply_leader_snapshot_to_display(&mut self, snapshot: &AppOutputSta... method refresh_follower_read_model (line 2593) | fn refresh_follower_read_model(&mut self) { method start_missing_runtime_torrents_for_current_role (line 2620) | async fn start_missing_runtime_torrents_for_current_role(&mut self) { method is_shared_mode_enabled (line 2636) | pub fn is_shared_mode_enabled(&self) -> bool { method is_current_shared_leader (line 2640) | pub fn is_current_shared_leader(&self) -> bool { method is_current_shared_follower (line 2644) | pub fn is_current_shared_follower(&self) -> bool { method cluster_capabilities (line 2649) | fn cluster_capabilities(&self) -> ClusterCapabilities { method can_run_leader_services (line 2661) | fn can_run_leader_services(&self) -> bool { method can_write_shared_state (line 2665) | fn can_write_shared_state(&self) -> bool { method ensure_leader_services_running (line 2669) | fn ensure_leader_services_running(&mut self) { method current_shared_lock_path (line 2702) | fn current_shared_lock_path() -> io::Result { method try_acquire_shared_runtime_lock (line 2708) | fn try_acquire_shared_runtime_lock() -> io::Result> { method watch_path_if_needed (line 2718) | fn watch_path_if_needed(&mut self, path: PathBuf) -> io::Result<()> { method desired_watch_paths_for_settings (line 2730) | fn desired_watch_paths_for_settings(&self, settings: &Settings) -> Vec... method reconcile_watched_paths (line 2738) | fn reconcile_watched_paths(&mut self, settings: &Settings) { method control_priority_overrides (line 2769) | fn control_priority_overrides( method shared_add_staging_dir (line 2783) | fn shared_add_staging_dir() -> Result { method is_shared_staged_add_path (line 2789) | fn is_shared_staged_add_path(path: &Path) -> bool { method cleanup_staged_add_file (line 2795) | fn cleanup_staged_add_file(path: &Path) { method prepare_add_torrent_file_request (line 2812) | pub(crate) fn prepare_add_torrent_file_request( method prepare_add_magnet_request (line 2858) | pub(crate) fn prepare_add_magnet_request( method resolve_add_payload (line 2873) | fn resolve_add_payload( method control_request_for_add_payload (line 2906) | fn control_request_for_add_payload( method resolve_add_ingress_action (line 2928) | fn resolve_add_ingress_action(&self, source: IngestSource, path: &Path... method should_archive_processed_ingest (line 2981) | fn should_archive_processed_ingest(&self, source: IngestSource, path: ... method update_pending_ingest_source_path (line 2990) | fn update_pending_ingest_source_path(&mut self, path: &Path, final_pat... method archive_processed_ingest (line 3018) | fn archive_processed_ingest(&mut self, source: IngestSource, path: &Pa... method open_manual_browser_for_torrent_file (line 3040) | fn open_manual_browser_for_torrent_file(&mut self, path: PathBuf) -> R... method open_manual_browser_for_payload (line 3118) | fn open_manual_browser_for_payload( method execute_add_ingress_action (line 3171) | async fn execute_add_ingress_action( method queue_control_request_for_leader (line 3288) | fn queue_control_request_for_leader( method dispatch_cluster_control_request (line 3308) | pub async fn dispatch_cluster_control_request( method map_add_result_to_control_response (line 3320) | fn map_add_result_to_control_response(result: CommandIngestResult) -> ... method maybe_promote_to_shared_leader (line 3335) | async fn maybe_promote_to_shared_leader(&mut self) { method run (line 3389) | pub async fn run( method should_draw_this_frame (line 3612) | fn should_draw_this_frame( method normal_mode_animation_active (line 3624) | fn normal_mode_animation_active( method disk_health_has_current_signal (line 3652) | fn disk_health_has_current_signal(app_state: &AppState) -> bool { method disk_health_phase_speed (line 3660) | fn disk_health_phase_speed(app_state: &AppState) -> f64 { method dht_wave_animation_active (line 3686) | fn dht_wave_animation_active( method selected_torrent_animation_active (line 3707) | fn selected_torrent_animation_active(torrent: &TorrentDisplayState, no... method normal_idle_frame_check_interval (line 3760) | fn normal_idle_frame_check_interval(target_frame_interval: Duration) -... method advance_next_draw_time (line 3764) | fn advance_next_draw_time( method tick_ui_effects_clock (line 3775) | fn tick_ui_effects_clock(&mut self) { method update_swarm_availability_flash (line 3846) | fn update_swarm_availability_flash(&mut self, now: Instant) { method refresh_system_warning (line 3886) | fn refresh_system_warning(&mut self) { method startup_crossterm_event_listener (line 3892) | fn startup_crossterm_event_listener(&mut self) { method flush_persistence_writer (line 3938) | async fn flush_persistence_writer(&mut self) { method shutdown_sequence (line 3942) | async fn shutdown_sequence(&mut self, terminal: &mut Terminal Vec> { method announce_torrents_to_dht (line 4102) | fn announce_torrents_to_dht(&self, info_hashes: I) method remove_torrent_runtime (line 4129) | fn remove_torrent_runtime(&mut self, info_hash: &[u8]) { method load_runtime_torrent_from_settings (line 4144) | async fn load_runtime_torrent_from_settings( method sync_runtime_torrents_from_settings (line 4206) | async fn sync_runtime_torrents_from_settings( method apply_settings_update (line 4332) | async fn apply_settings_update(&mut self, new_settings: Settings, pers... method handle_app_command (line 4412) | async fn handle_app_command(&mut self, command: AppCommand) { method handle_manager_event (line 4767) | fn handle_manager_event(&mut self, event: ManagerEvent) { method handle_file_event (line 5102) | async fn handle_file_event(&mut self, result: Result usize { method sync_dht_peer_slot_usage (line 5399) | fn sync_dht_peer_slot_usage(&mut self) { method handle_dht_status_changed (line 5412) | fn handle_dht_status_changed(&mut self) { method tuning_resource_limits (line 5421) | async fn tuning_resource_limits(&mut self) { method reschedule_tuning_deadline (line 5471) | fn reschedule_tuning_deadline(&mut self) { method reset_tuning_for_objective_change (line 5476) | fn reset_tuning_for_objective_change(&mut self) { method sync_tuning_state_from_controller (line 5485) | fn sync_tuning_state_from_controller(&mut self) { method save_state_to_disk (line 5494) | fn save_state_to_disk(&mut self) { method torrent_saved_location (line 5525) | fn torrent_saved_location(metrics: &TorrentMetrics) -> Option { method current_integrity_snapshots (line 5539) | fn current_integrity_snapshots(&self) -> Vec { method dispatch_integrity_probe_batches (line 5561) | fn dispatch_integrity_probe_batches(&mut self) { method advance_integrity_scheduler (line 5588) | fn advance_integrity_scheduler(&mut self, dt: Duration) { method sync_integrity_probe_deadlines (line 5593) | fn sync_integrity_probe_deadlines(&mut self) { method clamp_selected_indices (line 5613) | fn clamp_selected_indices(&mut self) { method sort_and_filter_torrent_list (line 5617) | pub fn sort_and_filter_torrent_list(&mut self) { method find_most_common_download_path (line 5621) | pub fn find_most_common_download_path(&mut self) -> Option { method get_initial_source_path (line 5638) | pub fn get_initial_source_path(&self) -> PathBuf { method get_initial_destination_path (line 5645) | pub fn get_initial_destination_path(&mut self) -> PathBuf { method add_torrent_from_file (line 5652) | pub async fn add_torrent_from_file( method add_magnet_torrent (line 5966) | pub async fn add_magnet_torrent( method source_watch_folder_for_path (line 6116) | fn source_watch_folder_for_path(&self, path: &std::path::Path) -> Opti... method has_live_runtime_for_torrent (line 6120) | fn has_live_runtime_for_torrent(&self, info_hash: &[u8]) -> bool { method clear_display_only_torrent (line 6124) | fn clear_display_only_torrent(&mut self, info_hash: &[u8]) { method is_host_watch_path (line 6135) | fn is_host_watch_path(&self, path: &Path) -> bool { method is_shared_inbox_path (line 6141) | fn is_shared_inbox_path(&self, path: &Path) -> bool { method relay_local_watch_file (line 6148) | fn relay_local_watch_file(&mut self, path: &Path, fallback_extension: ... method append_event_journal_entry (line 6177) | fn append_event_journal_entry(&mut self, entry: EventJournalEntry) { method control_event_scope (line 6181) | fn control_event_scope(&self) -> EventScope { method persist_torrent_metadata_snapshot (line 6189) | fn persist_torrent_metadata_snapshot( method record_ingest_queued (line 6224) | fn record_ingest_queued( method record_watch_path_discovered (line 6267) | fn record_watch_path_discovered(&mut self, path: &Path) { method record_rss_queued (line 6280) | fn record_rss_queued(&mut self, path: PathBuf, origin: IngestOrigin, i... method control_origin_for_command_path (line 6286) | fn control_origin_for_command_path(&self, path: &Path) -> ControlOrigin { method control_origin_for_ingest_path (line 6296) | fn control_origin_for_ingest_path(&self, path: &Path) -> ControlOrigin { method record_control_queued (line 6309) | fn record_control_queued( method record_control_result (line 6347) | fn record_control_result( method record_ingest_result (line 6394) | fn record_ingest_result(&mut self, path: &PathBuf, result: &CommandIng... method record_data_health_event (line 6494) | fn record_data_health_event( method record_torrent_completed_event (line 6518) | fn record_torrent_completed_event(&mut self, info_hash: &[u8], torrent... method apply_control_request (line 6566) | async fn apply_control_request(&mut self, request: &ControlRequest) ->... method watch_command_path (line 6647) | fn watch_command_path(cmd: &AppCommand) -> Option<&PathBuf> { method enqueue_watch_command (line 6660) | async fn enqueue_watch_command(&mut self, cmd: AppCommand, min_spacing... method process_pending_commands (line 6699) | async fn process_pending_commands(&mut self) { method flush_pending_watch_commands (line 6711) | fn flush_pending_watch_commands(&mut self) { method rebind_listener (line 6731) | async fn rebind_listener(&mut self, new_port: u16) -> bool { method download_rss_preview_item (line 6780) | async fn download_rss_preview_item(&mut self, item: RssPreviewItem) { method download_rss_torrent_from_url (line 6866) | async fn download_rss_torrent_from_url( method fetch_latest_version (line 6961) | async fn fetch_latest_version() -> Result AppOutputState { method dump_status_to_file (line 6992) | pub fn dump_status_to_file(&self) { method effective_status_dump_interval_secs (line 7011) | fn effective_status_dump_interval_secs(&self) -> u64 { method reschedule_status_dump_deadline (line 7022) | fn reschedule_status_dump_deadline(&mut self) { method trigger_status_dump_now (line 7031) | fn trigger_status_dump_now(&mut self) { method trigger_status_dump_after_successful_cluster_mutation (line 7036) | fn trigger_status_dump_after_successful_cluster_mutation(&mut self) { method set_runtime_status_dump_interval_override (line 7042) | fn set_runtime_status_dump_interval_override(&mut self, interval_secs:... method reschedule_startup_load_deadline (line 7047) | fn reschedule_startup_load_deadline(&mut self) { method maybe_log_startup_load_summary (line 7055) | fn maybe_log_startup_load_summary(&mut self) { method load_next_startup_batch (line 7071) | async fn load_next_startup_batch(&mut self) { type NetworkHistoryPersistRequest (line 1900) | pub struct NetworkHistoryPersistRequest { type ActivityHistoryPersistRequest (line 1906) | pub struct ActivityHistoryPersistRequest { type PersistPayload (line 1912) | pub struct PersistPayload { function initial_cluster_role_for_runtime_mode (line 1920) | fn initial_cluster_role_for_runtime_mode(runtime_mode: AppRuntimeMode) -... type DhtWaveTargets (line 1929) | struct DhtWaveTargets { function dht_wave_query_load_signal (line 1939) | fn dht_wave_query_load_signal(telemetry: &DhtWaveTelemetry) -> f64 { function dht_wave_query_pressure_signal (line 1949) | fn dht_wave_query_pressure_signal(telemetry: &DhtWaveTelemetry) -> f64 { function dht_wave_targets (line 1962) | fn dht_wave_targets(status: &DhtStatus, telemetry: &DhtWaveTelemetry) ->... function dht_wave_smoothing_factor (line 2032) | fn dht_wave_smoothing_factor(frame_dt: f64, rate: f64) -> f64 { function smooth_dht_wave_component (line 2036) | fn smooth_dht_wave_component(current: &mut f64, target: f64, factor: f64) { constant DHT_WAVE_PHASE_WRAP_PERIOD (line 2040) | const DHT_WAVE_PHASE_WRAP_PERIOD: f64 = std::f64::consts::TAU * 25.0; function advance_dht_wave_state (line 2042) | fn advance_dht_wave_state( function spawn_persistence_writer (line 2101) | fn spawn_persistence_writer( function build_app_dht_service_config (line 2207) | fn build_app_dht_service_config(client_configs: &Settings) -> DhtService... function is_valid_incoming_bittorrent_handshake (line 7146) | fn is_valid_incoming_bittorrent_handshake(buffer: &[u8]) -> bool { function persisted_validation_status_from_metrics (line 7152) | fn persisted_validation_status_from_metrics( function activity_marks_torrent_complete (line 7170) | fn activity_marks_torrent_complete(activity_message: &str) -> bool { function torrent_has_skipped_files (line 7174) | fn torrent_has_skipped_files(metrics: &TorrentMetrics) -> bool { function torrent_is_effectively_incomplete (line 7181) | pub fn torrent_is_effectively_incomplete(metrics: &TorrentMetrics) -> bo... function torrent_completion_percent (line 7195) | pub fn torrent_completion_percent(metrics: &TorrentMetrics) -> f64 { function calculate_adaptive_limits (line 7210) | fn calculate_adaptive_limits(client_configs: &Settings) -> (CalculatedLi... function compose_system_warning (line 7268) | fn compose_system_warning( function parse_hybrid_hashes (line 7280) | pub fn parse_hybrid_hashes(magnet_link: &str) -> (Option>, Optio... function info_hash_from_torrent_bytes (line 7284) | pub fn info_hash_from_torrent_bytes(bytes: &[u8]) -> Option> { function resolve_magnet_torrent_name (line 7288) | fn resolve_magnet_torrent_name( function torrent_file_count (line 7302) | fn torrent_file_count(torrent: &crate::torrent_file::Torrent) -> usize { function extract_magnet_display_name (line 7310) | fn extract_magnet_display_name(magnet_link: &str) -> Option { function clamp_selected_indices_in_state (line 7329) | pub(crate) fn clamp_selected_indices_in_state(app_state: &mut AppState) { function file_activity_wave_steps_per_second (line 7351) | pub(crate) fn file_activity_wave_steps_per_second(speed_bps: u64) -> f64 { function sort_and_filter_torrent_list_state (line 7373) | pub(crate) fn sort_and_filter_torrent_list_state(app_state: &mut AppStat... function has_effectively_incomplete_torrents (line 7470) | fn has_effectively_incomplete_torrents(app_state: &AppState) -> bool { function clear_finished_progress_priority_pin (line 7477) | fn clear_finished_progress_priority_pin(app_state: &mut AppState) -> bool { function refresh_autosort_after_stats (line 7491) | pub(crate) fn refresh_autosort_after_stats( function set_torrent_sort_to_column (line 7515) | fn set_torrent_sort_to_column(app_state: &mut AppState, column: TorrentS... function set_peer_sort_to_column (line 7519) | fn set_peer_sort_to_column(app_state: &mut AppState, column: PeerSortCol... function align_unpinned_sort_with_visible_activity (line 7523) | pub(crate) fn align_unpinned_sort_with_visible_activity(app_state: &mut ... function rss_settings_changed (line 7584) | fn rss_settings_changed(old_settings: &Settings, new_settings: &Settings... function should_load_persisted_torrent (line 7588) | fn should_load_persisted_torrent(torrent_settings: &TorrentSettings) -> ... function build_persist_payload (line 7592) | fn build_persist_payload( function apply_network_history_persist_result (line 7712) | fn apply_network_history_persist_result(app_state: &mut AppState, reques... function apply_activity_history_persist_result (line 7719) | fn apply_activity_history_persist_result(app_state: &mut AppState, reque... function should_persist_network_history_on_interval (line 7726) | fn should_persist_network_history_on_interval(app_state: &AppState) -> b... function queue_persistence_payload (line 7730) | fn queue_persistence_payload( function flush_persistence_writer_parts (line 7744) | async fn flush_persistence_writer_parts( function prune_rss_feed_errors (line 7756) | fn prune_rss_feed_errors( function watched_parent_matches (line 7771) | fn watched_parent_matches(path: &Path, watch_dir: &Path) -> bool { function normalized_watch_path (line 7777) | fn normalized_watch_path(path: &Path) -> PathBuf { function normalized_watch_path (line 7784) | fn normalized_watch_path(path: &Path) -> PathBuf { function mock_display (line 7845) | fn mock_display(name: &str, peer_count: usize) -> TorrentDisplayState { function shared_env_guard (line 7857) | fn shared_env_guard() -> &'static std::sync::Mutex<()> { function lock_shared_env (line 7861) | fn lock_shared_env() -> std::sync::MutexGuard<'static, ()> { function disk_backpressure_sample (line 7867) | fn disk_backpressure_sample( function set_disk_throttle_rate (line 7880) | fn set_disk_throttle_rate(throttle: &mut DiskBackpressureDownloadThrottl... function completed_bps_for_cap (line 7890) | fn completed_bps_for_cap(rate_bytes_per_sec: f64, disk_capacity_bps: u64... function run_disk_throttle_window (line 7894) | fn run_disk_throttle_window( function latency_limited_disk_sample (line 7907) | fn latency_limited_disk_sample( function run_latency_limited_disk_window (line 7926) | fn run_latency_limited_disk_window( function disk_backpressure_hill_climber_converges_up_from_low_cap (line 7938) | fn disk_backpressure_hill_climber_converges_up_from_low_cap() { function disk_backpressure_hill_climber_converges_down_from_high_cap (line 7951) | fn disk_backpressure_hill_climber_converges_down_from_high_cap() { function disk_backpressure_hill_climber_rejects_candidate_that_lowers_completed_speed (line 7966) | fn disk_backpressure_hill_climber_rejects_candidate_that_lowers_complete... function disk_backpressure_hill_climber_converges_up_to_latency_limited_disk (line 7981) | fn disk_backpressure_hill_climber_converges_up_to_latency_limited_disk() { function disk_backpressure_hill_climber_converges_down_to_latency_limited_disk (line 8008) | fn disk_backpressure_hill_climber_converges_down_to_latency_limited_disk... function disk_backpressure_hill_climber_converges_down_from_100mbps_to_30mbps_disk (line 8035) | fn disk_backpressure_hill_climber_converges_down_from_100mbps_to_30mbps_... function disk_backpressure_hill_climber_climbs_after_disk_capacity_recovers (line 8062) | fn disk_backpressure_hill_climber_climbs_after_disk_capacity_recovers() { function disk_backpressure_score_penalizes_only_above_target_receive_to_write_latency (line 8100) | fn disk_backpressure_score_penalizes_only_above_target_receive_to_write_... function disk_backpressure_throttle_waits_for_disk_write_signal (line 8120) | fn disk_backpressure_throttle_waits_for_disk_write_signal() { function disk_backpressure_throttle_disables_when_signal_disappears (line 8138) | fn disk_backpressure_throttle_disables_when_signal_disappears() { function configured_rate_limit_buckets_use_bytes_per_second (line 8159) | fn configured_rate_limit_buckets_use_bytes_per_second() { function disk_backpressure_throttle_clamps_to_one_mbps_floor (line 8168) | fn disk_backpressure_throttle_clamps_to_one_mbps_floor() { function disk_backpressure_throttle_disables_when_seeding (line 8181) | fn disk_backpressure_throttle_disables_when_seeding() { function effective_download_limit_uses_lower_configured_or_adaptive_limit (line 8189) | fn effective_download_limit_uses_lower_configured_or_adaptive_limit() { function app_disk_backpressure_update_changes_live_download_bucket (line 8207) | async fn app_disk_backpressure_update_changes_live_download_bucket() { function configure_temp_app_paths_for_test (line 8249) | fn configure_temp_app_paths_for_test() -> tempfile::TempDir { function wait_for_peer_slot_usages (line 8257) | async fn wait_for_peer_slot_usages( function format_filesystem_path_error_reports_directory_as_file_mismatch (line 8275) | fn format_filesystem_path_error_reports_directory_as_file_mismatch() { function format_filesystem_path_error_reports_missing_path_clearly (line 8288) | fn format_filesystem_path_error_reports_missing_path_clearly() { function move_file_with_fallback_copies_when_rename_crosses_devices (line 8297) | fn move_file_with_fallback_copies_when_rename_crosses_devices() { function persisted_validation_status_is_true_only_when_complete (line 8320) | fn persisted_validation_status_is_true_only_when_complete() { function persisted_validation_status_downgrades_when_incomplete (line 8344) | fn persisted_validation_status_downgrades_when_incomplete() { function persisted_validation_status_preserves_prior_true_for_metadata_unavailable_snapshot (line 8359) | fn persisted_validation_status_preserves_prior_true_for_metadata_unavail... function persisted_validation_status_treats_effectively_complete_torrents_as_complete (line 8367) | fn persisted_validation_status_treats_effectively_complete_torrents_as_c... function build_persist_payload_keeps_deferred_startup_torrents_in_settings (line 8387) | fn build_persist_payload_keeps_deferred_startup_torrents_in_settings() { function should_draw_normal_mode_when_dirty_or_animating (line 8437) | fn should_draw_normal_mode_when_dirty_or_animating() { function swarm_availability_counts_pieces_across_peers (line 8444) | fn swarm_availability_counts_pieces_across_peers() { function swarm_availability_flash_tracks_newly_added_pieces (line 8460) | fn swarm_availability_flash_tracks_newly_added_pieces() { function swarm_availability_flash_rolls_batch_by_piece_index (line 8483) | fn swarm_availability_flash_rolls_batch_by_piece_index() { function swarm_availability_flash_suppresses_full_map_increase (line 8507) | fn swarm_availability_flash_suppresses_full_map_increase() { function swarm_availability_flash_keeps_partial_increase_after_complete_baseline (line 8527) | fn swarm_availability_flash_keeps_partial_increase_after_complete_baseli... function swarm_availability_flash_suppresses_new_peer_initial_bitfield (line 8546) | fn swarm_availability_flash_suppresses_new_peer_initial_bitfield() { function swarm_availability_flash_tracks_known_peer_new_piece (line 8567) | fn swarm_availability_flash_tracks_known_peer_new_piece() { function swarm_availability_flash_ignores_later_new_peer_bitfield (line 8593) | fn swarm_availability_flash_ignores_later_new_peer_bitfield() { function should_draw_every_frame_in_welcome_mode (line 8624) | fn should_draw_every_frame_in_welcome_mode() { function should_only_draw_dirty_in_power_saving_mode (line 8630) | fn should_only_draw_dirty_in_power_saving_mode() { function normal_animation_gate_is_idle_for_static_state (line 8644) | fn normal_animation_gate_is_idle_for_static_state() { function normal_animation_gate_detects_active_swarm_availability_flash (line 8655) | fn normal_animation_gate_detects_active_swarm_availability_flash() { function normal_animation_gate_ignores_held_disk_health_when_disk_is_idle (line 8679) | fn normal_animation_gate_ignores_held_disk_health_when_disk_is_idle() { function normal_animation_gate_detects_current_disk_activity (line 8695) | fn normal_animation_gate_detects_current_disk_activity() { function disk_health_phase_speed_keeps_idle_wobble_without_transfers (line 8709) | fn disk_health_phase_speed_keeps_idle_wobble_without_transfers() { function disk_health_phase_speed_uses_download_upload_direction (line 8719) | fn disk_health_phase_speed_uses_download_upload_direction() { function disk_health_phase_speed_increases_with_pressure (line 8736) | fn disk_health_phase_speed_increases_with_pressure() { function normal_animation_gate_detects_selected_torrent_activity (line 8756) | fn normal_animation_gate_detects_selected_torrent_activity() { function normal_animation_gate_detects_dht_query_activity (line 8772) | fn normal_animation_gate_detects_dht_query_activity() { function normal_idle_check_uses_light_polling_cadence_for_fast_targets (line 8787) | fn normal_idle_check_uses_light_polling_cadence_for_fast_targets() { function normal_idle_check_preserves_slower_targets (line 8795) | fn normal_idle_check_preserves_slower_targets() { function data_rate_sixty_uses_precise_frame_interval (line 8803) | fn data_rate_sixty_uses_precise_frame_interval() { function draw_scheduler_recovers_from_late_timer_wakeups (line 8810) | fn draw_scheduler_recovers_from_late_timer_wakeups() { function ui_fps_counter_measures_drawn_frames_per_second (line 8825) | fn ui_fps_counter_measures_drawn_frames_per_second() { function test_dht_wave_targets (line 8837) | fn test_dht_wave_targets( function test_dht_wave_signal_at (line 8856) | fn test_dht_wave_signal_at(wave: &DhtWaveUiState, x: f64) -> f64 { function dht_wave_targets_remain_reactive_above_ten_queries (line 8868) | fn dht_wave_targets_remain_reactive_above_ten_queries() { function dht_wave_state_smooths_60fps_target_transition (line 8906) | fn dht_wave_state_smooths_60fps_target_transition() { function dht_wave_state_stays_continuous_across_phase_wrap (line 8965) | fn dht_wave_state_stays_continuous_across_phase_wrap() { function completion_helper_marks_seeding_complete (line 8995) | fn completion_helper_marks_seeding_complete() { function completion_helper_marks_skipped_files_complete (line 9008) | fn completion_helper_marks_skipped_files_complete() { function completion_helper_marks_metadata_pending_incomplete (line 9021) | fn completion_helper_marks_metadata_pending_incomplete() { function completion_helper_marks_zero_piece_complete_when_metrics_say_complete (line 9029) | fn completion_helper_marks_zero_piece_complete_when_metrics_say_complete... function torrent_saved_location_uses_file_path_for_flat_torrents (line 9039) | fn torrent_saved_location_uses_file_path_for_flat_torrents() { function torrent_saved_location_uses_root_for_explicit_empty_container_multi_file_torrents (line 9056) | fn torrent_saved_location_uses_root_for_explicit_empty_container_multi_f... function torrent_saved_location_uses_root_for_single_entry_multi_file_torrents_without_container (line 9073) | fn torrent_saved_location_uses_root_for_single_entry_multi_file_torrents... function clamp_selected_indices_clamps_torrent_and_peer_to_bounds (line 9090) | fn clamp_selected_indices_clamps_torrent_and_peer_to_bounds() { function sort_and_filter_applies_query_and_clamps_selection (line 9111) | fn sort_and_filter_applies_query_and_clamps_selection() { function sort_and_filter_prioritizes_unavailable_torrents (line 9139) | fn sort_and_filter_prioritizes_unavailable_torrents() { function sort_and_filter_respects_pinned_sort_over_availability_priority (line 9169) | fn sort_and_filter_respects_pinned_sort_over_availability_priority() { function sort_and_filter_progress_descending_puts_most_complete_first (line 9198) | fn sort_and_filter_progress_descending_puts_most_complete_first() { function sort_and_filter_progress_ascending_puts_zero_progress_first (line 9225) | fn sort_and_filter_progress_ascending_puts_zero_progress_first() { function stats_autosort_refresh_reorders_torrents_when_sort_mode_changes (line 9252) | fn stats_autosort_refresh_reorders_torrents_when_sort_mode_changes() { function stats_autosort_refresh_reorders_unpinned_torrents_when_speeds_change (line 9284) | fn stats_autosort_refresh_reorders_unpinned_torrents_when_speeds_change() { function stats_autosort_refresh_preserves_pinned_torrent_order_when_speeds_change (line 9320) | fn stats_autosort_refresh_preserves_pinned_torrent_order_when_speeds_cha... function stats_autosort_refresh_clears_finished_progress_priority_pin (line 9356) | fn stats_autosort_refresh_clears_finished_progress_priority_pin() { function stats_autosort_refresh_keeps_progress_priority_pin_while_unfinished (line 9386) | fn stats_autosort_refresh_keeps_progress_priority_pin_while_unfinished() { function stats_autosort_refresh_keeps_progress_priority_pin_for_metadata_pending (line 9418) | fn stats_autosort_refresh_keeps_progress_priority_pin_for_metadata_pendi... function stats_autosort_refresh_keeps_non_progress_user_pin_after_completion (line 9449) | fn stats_autosort_refresh_keeps_non_progress_user_pin_after_completion() { function stats_autosort_refresh_clears_progress_pin_for_completed_probe_issue (line 9479) | fn stats_autosort_refresh_clears_progress_pin_for_completed_probe_issue() { function stats_autosort_refresh_marks_change_when_only_peer_sort_changes (line 9517) | fn stats_autosort_refresh_marks_change_when_only_peer_sort_changes() { function align_unpinned_sort_uses_upload_when_only_upload_is_visible (line 9534) | fn align_unpinned_sort_uses_upload_when_only_upload_is_visible() { function align_unpinned_sort_preserves_current_sort_when_idle_and_complete (line 9554) | fn align_unpinned_sort_preserves_current_sort_when_idle_and_complete() { function align_unpinned_sort_preserves_pinned_torrent_sort (line 9575) | fn align_unpinned_sort_preserves_pinned_torrent_sort() { function align_unpinned_sort_uses_peer_upload_when_only_peer_upload_is_visible (line 9596) | fn align_unpinned_sort_uses_peer_upload_when_only_peer_upload_is_visible... function align_unpinned_sort_keeps_peer_speed_sort_when_peer_activity_is_idle (line 9616) | fn align_unpinned_sort_keeps_peer_speed_sort_when_peer_activity_is_idle() { function extract_magnet_display_name_decodes_dn (line 9637) | fn extract_magnet_display_name_decodes_dn() { function resolve_magnet_name_uses_dn_for_placeholder (line 9647) | fn resolve_magnet_name_uses_dn_for_placeholder() { function resolve_magnet_name_falls_back_to_hash_label_when_dn_missing (line 9657) | fn resolve_magnet_name_falls_back_to_hash_label_when_dn_missing() { function extract_magnet_display_name_skips_malformed_segments (line 9667) | fn extract_magnet_display_name_skips_malformed_segments() { function parse_hybrid_hashes_handles_case_insensitive_xt_and_urn_prefixes (line 9676) | fn parse_hybrid_hashes_handles_case_insensitive_xt_and_urn_prefixes() { function rss_settings_changed_detects_filter_updates (line 9684) | fn rss_settings_changed_detects_filter_updates() { function rss_settings_changed_ignores_non_rss_updates (line 9697) | fn rss_settings_changed_ignores_non_rss_updates() { function prune_rss_feed_errors_removes_deleted_feed_urls (line 9706) | fn prune_rss_feed_errors_removes_deleted_feed_urls() { function prune_rss_feed_errors_is_noop_when_all_urls_still_configured (line 9736) | fn prune_rss_feed_errors_is_noop_when_all_urls_still_configured() { function compose_system_warning_merges_base_and_dht_messages (line 9758) | fn compose_system_warning_merges_base_and_dht_messages() { function compose_system_warning_handles_single_or_no_messages (line 9764) | fn compose_system_warning_handles_single_or_no_messages() { function incoming_handshake_validator_accepts_bittorrent_handshake_prefix (line 9777) | fn incoming_handshake_validator_accepts_bittorrent_handshake_prefix() { function incoming_handshake_validator_rejects_non_bittorrent_prefix (line 9786) | fn incoming_handshake_validator_rejects_non_bittorrent_prefix() { function mark_port_open_command_tracks_ipv4_and_ipv6_independently (line 9795) | async fn mark_port_open_command_tracks_ipv4_and_ipv6_independently() { function mark_port_open_command_treats_ipv4_mapped_ipv6_as_ipv4_reachability (line 9827) | async fn mark_port_open_command_treats_ipv4_mapped_ipv6_as_ipv4_reachabi... function rebind_listener_with_ephemeral_port_notifies_managers_with_bound_port (line 9848) | async fn rebind_listener_with_ephemeral_port_notifies_managers_with_boun... function rebind_listener_reannounces_running_torrents_on_new_port_when_already_reachable (line 9878) | async fn rebind_listener_reannounces_running_torrents_on_new_port_when_a... function mark_port_open_announces_running_torrents_once_per_family_transition (line 9918) | async fn mark_port_open_announces_running_torrents_once_per_family_trans... function apply_settings_update_restores_previous_port_when_rebind_fails (line 9998) | async fn apply_settings_update_restores_previous_port_when_rebind_fails() { function dht_status_change_resends_cached_peer_slot_usage (line 10050) | async fn dht_status_change_resends_cached_peer_slot_usage() { function apply_settings_update_reconfigures_dht_bootstrap_after_failed_port_rebind (line 10087) | async fn apply_settings_update_reconfigures_dht_bootstrap_after_failed_p... function should_load_persisted_torrent_skips_only_deleting_entries (line 10158) | fn should_load_persisted_torrent_skips_only_deleting_entries() { function reset_tuning_for_objective_change_reschedules_deadline (line 10178) | async fn reset_tuning_for_objective_change_reschedules_deadline() { function handle_manager_event_file_probe_status_marks_data_unavailable (line 10206) | async fn handle_manager_event_file_probe_status_marks_data_unavailable() { function load_next_startup_batch_loads_only_one_deferred_torrent (line 10260) | async fn load_next_startup_batch_loads_only_one_deferred_torrent() { function load_next_startup_batch_records_one_summary_after_queue_drains (line 10306) | async fn load_next_startup_batch_records_one_summary_after_queue_drains() { function load_next_startup_batch_keeps_failed_deferred_torrent_queued (line 10357) | async fn load_next_startup_batch_keeps_failed_deferred_torrent_queued() { function load_next_startup_batch_rotates_failed_deferred_torrent_behind_later_entries (line 10402) | async fn load_next_startup_batch_rotates_failed_deferred_torrent_behind_... function data_availability_fault_records_event_journal_entry (line 10473) | async fn data_availability_fault_records_event_journal_entry() { function ingest_journal_records_queue_and_terminal_result_with_shared_correlation (line 10518) | async fn ingest_journal_records_queue_and_terminal_result_with_shared_co... function startup_selected_header_reflects_pinned_torrent_sort (line 10586) | async fn startup_selected_header_reflects_pinned_torrent_sort() { function control_journal_preserves_watch_folder_origin (line 10606) | async fn control_journal_preserves_watch_folder_origin() { function control_origin_for_ingest_path_uses_rss_origin_when_available (line 10647) | async fn control_origin_for_ingest_path_uses_rss_origin_when_available() { function manual_torrent_browser_moves_standalone_watch_file_to_processed_and_updates_journal (line 10672) | async fn manual_torrent_browser_moves_standalone_watch_file_to_processed... function manual_torrent_browser_moves_shared_inbox_file_to_shared_processed_and_updates_journal (line 10720) | async fn manual_torrent_browser_moves_shared_inbox_file_to_shared_proces... function missing_verbatim_shared_inbox_magnet_is_ignored (line 10799) | async fn missing_verbatim_shared_inbox_magnet_is_ignored() { function unreadable_shared_inbox_magnet_is_not_ignored_as_missing (line 10862) | async fn unreadable_shared_inbox_magnet_is_not_ignored_as_missing() { function partial_probe_result_does_not_clear_previous_unavailable_state (line 10921) | async fn partial_probe_result_does_not_clear_previous_unavailable_state() { function dispatch_integrity_probe_batches_requests_work_immediately (line 10985) | async fn dispatch_integrity_probe_batches_requests_work_immediately() { function metadata_loaded_dispatches_probe_without_waiting_for_tick (line 11025) | async fn metadata_loaded_dispatches_probe_without_waiting_for_tick() { function metadata_loaded_updates_layout_before_fault_fanout_for_single_entry_multi_file (line 11089) | async fn metadata_loaded_updates_layout_before_fault_fanout_for_single_e... function data_availability_fault_does_not_fan_out_across_flat_torrents_in_same_directory (line 11179) | async fn data_availability_fault_does_not_fan_out_across_flat_torrents_i... function partial_probe_marks_torrent_unavailable_before_sweep_completion (line 11274) | async fn partial_probe_marks_torrent_unavailable_before_sweep_completion... function healthy_probe_requests_manager_recovery_but_does_not_flip_ui_until_metrics (line 11350) | async fn healthy_probe_requests_manager_recovery_but_does_not_flip_ui_un... function completion_transition_records_single_torrent_completed_event (line 11420) | async fn completion_transition_records_single_torrent_completed_event() { function completed_torrents_restored_as_complete_do_not_rejournal_on_metrics_refresh (line 11488) | async fn completed_torrents_restored_as_complete_do_not_rejournal_on_met... function completed_torrents_do_not_duplicate_existing_completion_journal_entries (line 11546) | async fn completed_torrents_do_not_duplicate_existing_completion_journal... function restored_completed_torrents_skip_startup_recompletion_once (line 11619) | async fn restored_completed_torrents_skip_startup_recompletion_once() { function control_request_pause_updates_runtime_config (line 11729) | async fn control_request_pause_updates_runtime_config() { function shared_follower_suppresses_incomplete_runtime_and_converges_display_state (line 11760) | async fn shared_follower_suppresses_incomplete_runtime_and_converges_dis... function apply_settings_update_refreshes_file_preview_tree_priorities (line 11806) | async fn apply_settings_update_refreshes_file_preview_tree_priorities() { function apply_settings_update_preserves_preview_file_indices_for_nonlexical_order (line 11861) | async fn apply_settings_update_preserves_preview_file_indices_for_nonlex... function shared_follower_promotion_starts_previously_suppressed_runtime (line 11942) | async fn shared_follower_promotion_starts_previously_suppressed_runtime() { function cluster_revision_reload_applies_for_followers_and_stops_after_promotion (line 11980) | async fn cluster_revision_reload_applies_for_followers_and_stops_after_p... function shared_follower_read_model_prefers_leader_snapshot_for_incomplete_torrents (line 12062) | async fn shared_follower_read_model_prefers_leader_snapshot_for_incomple... function shared_leader_dump_writes_host_and_cluster_status_files (line 12174) | async fn shared_leader_dump_writes_host_and_cluster_status_files() { function shared_leader_defaults_status_follow_to_five_seconds (line 12236) | async fn shared_leader_defaults_status_follow_to_five_seconds() { function shared_follower_path_file_with_default_download_routes_through_control_request (line 12281) | async fn shared_follower_path_file_with_default_download_routes_through_... function shared_follower_allows_host_local_config_updates_and_rewatches_host_folder (line 12363) | async fn shared_follower_allows_host_local_config_updates_and_rewatches_... function control_request_status_follow_start_sets_runtime_override (line 12423) | async fn control_request_status_follow_start_sets_runtime_override() { function enqueue_watch_command_spills_to_pending_queue_when_channel_is_full (line 12444) | async fn enqueue_watch_command_spills_to_pending_queue_when_channel_is_f... function add_magnet_torrent_rejects_hashless_magnet_without_panicking (line 12468) | async fn add_magnet_torrent_rejects_hashless_magnet_without_panicking() { function healthy_probe_for_available_torrent_does_not_request_recovery_again (line 12502) | async fn healthy_probe_for_available_torrent_does_not_request_recovery_a... function stale_healthy_probe_does_not_request_manager_recovery (line 12546) | async fn stale_healthy_probe_does_not_request_manager_recovery() { function build_persist_payload_preserves_validation_when_data_is_unavailable (line 12594) | fn build_persist_payload_preserves_validation_when_data_is_unavailable() { function ui_telemetry_metrics_refresh_updates_data_availability_flag (line 12616) | fn ui_telemetry_metrics_refresh_updates_data_availability_flag() { function network_history_interval_persistence_only_when_dirty (line 12644) | fn network_history_interval_persistence_only_when_dirty() { function build_persist_payload_skips_network_history_while_restore_is_pending (line 12656) | fn build_persist_payload_skips_network_history_while_restore_is_pending() { function build_persist_payload_syncs_rollup_snapshot_into_network_history_state (line 12679) | fn build_persist_payload_syncs_rollup_snapshot_into_network_history_stat... function apply_network_history_persist_result_clears_dirty_only_for_latest_success (line 12708) | fn apply_network_history_persist_result_clears_dirty_only_for_latest_suc... function queue_persistence_payload_carries_network_history_state (line 12735) | async fn queue_persistence_payload_carries_network_history_state() { function flush_persistence_writer_parts_drops_sender_and_joins_task (line 12781) | async fn flush_persistence_writer_parts_drops_sender_and_joins_task() { function listener_set_bind_keeps_ipv6_listener_when_ipv4_port_is_already_in_use (line 12794) | async fn listener_set_bind_keeps_ipv6_listener_when_ipv4_port_is_already... function listener_set_bind_keeps_ipv4_listener_when_ipv6_port_is_already_in_use (line 12838) | async fn listener_set_bind_keeps_ipv4_listener_when_ipv6_port_is_already... FILE: src/command.rs type TorrentCommand (line 15) | pub enum TorrentCommand { type TorrentCommandSummary (line 132) | pub struct TorrentCommandSummary<'a>(pub &'a TorrentCommand); function fmt (line 134) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { FILE: src/config.rs type TorrentSortColumn (line 30) | pub enum TorrentSortColumn { method default_direction (line 39) | pub fn default_direction(self) -> SortDirection { type PeerSortColumn (line 49) | pub enum PeerSortColumn { method default_direction (line 63) | pub fn default_direction(self) -> SortDirection { type SortDirection (line 72) | pub enum SortDirection { type RssAddedVia (line 79) | pub enum RssAddedVia { type RssFeed (line 87) | pub struct RssFeed { method default (line 93) | fn default() -> Self { type RssFilter (line 103) | pub struct RssFilter { method default (line 111) | fn default() -> Self { type RssFilterMode (line 122) | pub enum RssFilterMode { type RssSettings (line 130) | pub struct RssSettings { method default (line 139) | fn default() -> Self { type RssHistoryEntry (line 152) | pub struct RssHistoryEntry { type FeedSyncError (line 165) | pub struct FeedSyncError { type Settings (line 172) | pub struct Settings { method default (line 204) | fn default() -> Self { type TorrentSettings (line 246) | pub struct TorrentSettings { type TorrentMetadataFileEntry (line 260) | pub struct TorrentMetadataFileEntry { type TorrentMetadataEntry (line 267) | pub struct TorrentMetadataEntry { method placeholder_from_settings (line 676) | fn placeholder_from_settings(settings: &TorrentSettings) -> Option( function deserialize (line 301) | pub fn deserialize<'de, D>(deserializer: D) -> Result) -> i... method apply_to_settings (line 793) | fn apply_to_settings( method default (line 414) | fn default() -> Self { type CatalogConfig (line 448) | struct CatalogConfig { method from_settings (line 838) | fn from_settings( method apply_to_settings (line 858) | fn apply_to_settings( type LayeredConfig (line 453) | struct LayeredConfig { method from_flat_settings (line 549) | fn from_flat_settings(settings: &Settings) -> Self { method from_shared_settings (line 559) | fn from_shared_settings( method resolve_flat_settings (line 586) | fn resolve_flat_settings(&self) -> io::Result { method resolve_shared_settings (line 590) | fn resolve_shared_settings( method resolve_settings (line 598) | fn resolve_settings( type HostConfig (line 461) | struct HostConfig { method from_flat_settings (line 874) | fn from_flat_settings(settings: &Settings) -> Self { method from_settings (line 882) | fn from_settings(settings: &Settings, shared_client_id: &str) -> Self { method apply_to_settings (line 890) | fn apply_to_settings(&self, settings: &mut Settings) { method default (line 468) | fn default() -> Self { type NormalConfigPaths (line 478) | struct NormalConfigPaths { type SharedConfigPaths (line 485) | struct SharedConfigPaths { type NormalConfigBackend (line 497) | struct NormalConfigBackend { method load_settings (line 1856) | fn load_settings(&self) -> io::Result { method load_settings_for_cli (line 1881) | fn load_settings_for_cli(&self) -> io::Result { method save_settings (line 1910) | fn save_settings(&self, settings: &Settings) -> io::Result<()> { type SharedConfigBackend (line 502) | struct SharedConfigBackend { method load_settings (line 1936) | fn load_settings(&self) -> io::Result { method load_settings_for_cli (line 1947) | fn load_settings_for_cli(&self) -> io::Result { method save_settings (line 1962) | fn save_settings(&self, settings: &Settings) -> io::Result<()> { type LoggedSharedConfigRevision (line 507) | struct LoggedSharedConfigRevision { type SharedCatalogBackupPolicy (line 514) | struct SharedCatalogBackupPolicy { type ConfigBackend (line 520) | enum ConfigBackend { method load_settings (line 2031) | fn load_settings(&self) -> io::Result { method load_settings_for_cli (line 2045) | fn load_settings_for_cli(&self) -> io::Result { method save_settings (line 2059) | fn save_settings(&self, settings: &Settings) -> io::Result<()> { method load_torrent_metadata (line 2066) | fn load_torrent_metadata(&self) -> io::Result { method upsert_torrent_metadata (line 2077) | fn upsert_torrent_metadata(&self, entry: TorrentMetadataEntry) -> io::... function app_paths_override (line 535) | fn app_paths_override() -> &'static Mutex> { function shared_env_guard_for_tests (line 540) | pub(crate) fn shared_env_guard_for_tests() -> &'static Mutex<()> { function logged_shared_config_revision (line 544) | fn logged_shared_config_revision() -> &'static Mutex String { function resolve_shared_mount_and_config_root (line 914) | fn resolve_shared_mount_and_config_root(path: PathBuf) -> (PathBuf, Path... function launcher_shared_config_path (line 933) | fn launcher_shared_config_path() -> io::Result { function launcher_host_id_path (line 943) | fn launcher_host_id_path() -> io::Result { function load_launcher_shared_config (line 953) | fn load_launcher_shared_config() -> io::Result> { function load_launcher_host_id (line 965) | fn load_launcher_host_id() -> io::Result> { function resolve_shared_config_selection (line 977) | fn resolve_shared_config_selection() -> io::Result Option { function shared_config_root (line 1009) | fn shared_config_root() -> Option { function sanitized_host_id_candidate (line 1016) | fn sanitized_host_id_candidate(raw: &str) -> Option { function resolve_host_id_selection_from_sources (line 1021) | fn resolve_host_id_selection_from_sources( function resolve_host_id (line 1072) | fn resolve_host_id() -> String { function resolve_host_id_selection (line 1076) | fn resolve_host_id_selection() -> HostIdSelection { function resolve_shared_config_paths (line 1098) | fn resolve_shared_config_paths() -> io::Result> { function resolve_config_backend (line 1118) | fn resolve_config_backend() -> io::Result { function portable_relative_path_string (line 1137) | fn portable_relative_path_string(path: &Path) -> String { function shared_relative_path_to_pathbuf (line 1144) | fn shared_relative_path_to_pathbuf(relative: &str) -> PathBuf { function normalize_shared_relative_path (line 1154) | fn normalize_shared_relative_path( function encode_shared_data_path (line 1186) | fn encode_shared_data_path( function strip_shared_mount_prefix (line 1212) | fn strip_shared_mount_prefix(path: &Path, shared_mount_root: &Path) -> R... function path_without_verbatim_prefix (line 1235) | fn path_without_verbatim_prefix(path: &Path) -> PathBuf { function strip_windows_prefix_case_insensitive (line 1248) | fn strip_windows_prefix_case_insensitive(path: &Path, root: &Path) -> Op... function component_eq_ignore_ascii_case (line 1269) | fn component_eq_ignore_ascii_case(left: Component<'_>, right: Component<... function resolve_shared_data_path (line 1275) | fn resolve_shared_data_path( function validate_shared_runtime_settings (line 1292) | fn validate_shared_runtime_settings( function encode_catalog_torrent_source (line 1313) | fn encode_catalog_torrent_source(source: &str, shared_root: Option<&Path... function decode_catalog_torrent_source (line 1334) | fn decode_catalog_torrent_source(source: &str, shared_root: Option<&Path... function apply_env_overrides (line 1349) | fn apply_env_overrides(settings: &Settings) -> io::Result { function parse_env_override (line 1365) | fn parse_env_override(key: &str) -> io::Result> function parse_path_env_override (line 1390) | fn parse_path_env_override(key: &str) -> io::Result> { function env_var_case_insensitive (line 1405) | fn env_var_case_insensitive(key: &str) -> io::Result> { function env_var_os_case_insensitive (line 1417) | fn env_var_os_case_insensitive(key: &str) -> Option { function expand_home_path (line 1430) | fn expand_home_path(value: OsString) -> PathBuf { function home_dir_from_env (line 1456) | fn home_dir_from_env() -> Option { function absolutize_env_path (line 1474) | fn absolutize_env_path(path: PathBuf) -> PathBuf { function read_toml_or_default (line 1484) | fn read_toml_or_default(path: &Path) -> io::Result function read_torrent_metadata_or_default (line 1496) | fn read_torrent_metadata_or_default(path: &Path) -> io::Result io::Result> { function ensure_fingerprint_matches (line 1523) | fn ensure_fingerprint_matches( function write_toml_atomically_with_fingerprint (line 1538) | fn write_toml_atomically_with_fingerprint( function shared_catalog_backup_policy (line 1547) | fn shared_catalog_backup_policy(torrent_count: usize) -> SharedCatalogBa... function shared_catalog_backup_roll_start (line 1572) | fn shared_catalog_backup_roll_start( function cleanup_shared_catalog_backups (line 1581) | fn cleanup_shared_catalog_backups(backup_dir: &Path, retained_backups: u... function backup_shared_catalog_before_write (line 1603) | fn backup_shared_catalog_before_write( function write_shared_cluster_revision_marker (line 1625) | fn write_shared_cluster_revision_marker(root_dir: &Path) -> io::Result io::Result... function bootstrap_shared_host_config (line 1735) | fn bootstrap_shared_host_config(paths: &SharedConfigPaths) -> io::Result... function clear_shared_config_state (line 1764) | fn clear_shared_config_state() {} function clear_shared_config_state_for_tests (line 1767) | pub(crate) fn clear_shared_config_state_for_tests() { function set_app_paths_override_for_tests (line 1772) | pub(crate) fn set_app_paths_override_for_tests(paths: Option<(PathBuf, P... function first_run_settings (line 1779) | fn first_run_settings() -> Settings { function client_never_started_error (line 1789) | fn client_never_started_error() -> io::Error { function runtime_lock_is_held (line 1796) | fn runtime_lock_is_held(lock_path: Option<&Path>) -> bool { function load_current_shared_layered (line 1825) | fn load_current_shared_layered( function upsert_torrent_metadata_entry (line 2104) | fn upsert_torrent_metadata_entry( function get_app_paths (line 2119) | pub fn get_app_paths() -> Option<(PathBuf, PathBuf)> { function fallback_app_paths (line 2143) | fn fallback_app_paths() -> Option<(PathBuf, PathBuf)> { function app_config_dir (line 2166) | pub fn app_config_dir() -> Option { function local_runtime_data_dir (line 2170) | pub fn local_runtime_data_dir() -> Option { function local_settings_path (line 2174) | pub fn local_settings_path() -> Option { function effective_shared_config_selection (line 2178) | pub fn effective_shared_config_selection() -> io::Result io::Result { function effective_host_id_selection (line 2186) | pub fn effective_host_id_selection() -> io::Result { function persisted_host_id_path (line 2190) | pub fn persisted_host_id_path() -> io::Result { function set_persisted_shared_config (line 2194) | pub fn set_persisted_shared_config(path: &Path) -> io::Result io::Result { function set_persisted_host_id (line 2232) | pub fn set_persisted_host_id(host_id: &str) -> io::Result { function clear_persisted_host_id (line 2254) | pub fn clear_persisted_host_id() -> io::Result { function local_normal_backend (line 2264) | fn local_normal_backend() -> io::Result { function shared_backend_for_mount_root (line 2280) | fn shared_backend_for_mount_root(path: &Path) -> io::Result io::Result io::Result<()> { function is_shared_config_mode (line 2367) | pub fn is_shared_config_mode() -> bool { function shared_settings_path (line 2371) | pub fn shared_settings_path() -> Option { function shared_host_dir (line 2378) | pub fn shared_host_dir() -> Option { function shared_torrents_path (line 2385) | pub fn shared_torrents_path() -> Option { function shared_root_path (line 2389) | pub fn shared_root_path() -> Option { function shared_data_path (line 2393) | pub fn shared_data_path() -> Option { function shared_torrent_file_path (line 2397) | pub fn shared_torrent_file_path(info_hash: &[u8]) -> Option { function shared_inbox_path (line 2401) | pub fn shared_inbox_path() -> Option { function shared_processed_path (line 2405) | pub fn shared_processed_path() -> Option { function shared_status_path (line 2409) | pub fn shared_status_path() -> Option { function shared_leader_status_path (line 2413) | pub fn shared_leader_status_path() -> Option { function runtime_data_dir (line 2417) | pub fn runtime_data_dir() -> Option { function runtime_log_dir (line 2425) | pub fn runtime_log_dir() -> Option { function local_runtime_log_dir (line 2429) | pub fn local_runtime_log_dir() -> Option { function local_cli_log_dir (line 2433) | pub fn local_cli_log_dir() -> Option { function runtime_persistence_dir (line 2437) | pub fn runtime_persistence_dir() -> Option { function local_lock_path (line 2441) | pub fn local_lock_path() -> Option { function encode_shared_cli_torrent_path (line 2445) | pub fn encode_shared_cli_torrent_path(path: &Path) -> io::Result io::Result Option { function shared_lock_path (line 2470) | pub fn shared_lock_path() -> Option { function resolve_host_watch_path (line 2474) | pub fn resolve_host_watch_path(settings: &Settings) -> Option { type SettingsChangeScope (line 2482) | pub enum SettingsChangeScope { function classify_shared_mode_settings_change (line 2488) | pub fn classify_shared_mode_settings_change( function resolve_command_watch_path (line 2511) | pub fn resolve_command_watch_path(settings: &Settings) -> Option { function push_unique_path (line 2519) | fn push_unique_path(paths: &mut Vec, path: PathBuf) { function resolve_additional_watch_paths_from_sources (line 2525) | fn resolve_additional_watch_paths_from_sources(vars: I) -> Vec<... function additional_watch_paths (line 2563) | pub fn additional_watch_paths() -> Vec { function normalized_watch_component (line 2567) | fn normalized_watch_component(component: Component<'_>) -> String { function normalized_watch_components (line 2579) | fn normalized_watch_components(path: &Path) -> Vec { function component_prefix_matches (line 2586) | fn component_prefix_matches(path: &[String], prefix: &[String]) -> bool { function watch_paths_overlap (line 2590) | fn watch_paths_overlap(left: &Path, right: &Path) -> bool { function shared_watch_exclusion_paths (line 2599) | fn shared_watch_exclusion_paths() -> Vec { function additional_host_watch_paths (line 2610) | fn additional_host_watch_paths() -> Vec { function host_watch_paths (line 2622) | pub fn host_watch_paths(settings: &Settings) -> Vec { function runtime_watch_paths (line 2636) | pub fn runtime_watch_paths( function configured_watch_paths (line 2670) | pub fn configured_watch_paths(settings: &Settings) -> Vec { function get_watch_path (line 2674) | pub fn get_watch_path() -> Option<(PathBuf, PathBuf)> { function create_watch_directories (line 2684) | pub fn create_watch_directories() -> io::Result<()> { function ensure_watch_directories (line 2693) | pub fn ensure_watch_directories(settings: &Settings) -> io::Result<()> { function load_settings (line 2727) | pub fn load_settings() -> io::Result { function load_settings_for_cli (line 2731) | pub fn load_settings_for_cli() -> io::Result { function save_settings (line 2735) | pub fn save_settings(settings: &Settings) -> io::Result<()> { function load_torrent_metadata (line 2739) | pub fn load_torrent_metadata() -> io::Result { function upsert_torrent_metadata (line 2743) | pub fn upsert_torrent_metadata(entry: TorrentMetadataEntry) -> io::Resul... function shared_host_id (line 2747) | pub fn shared_host_id() -> Option { function cleanup_old_backups (line 2753) | fn cleanup_old_backups(backup_dir: &PathBuf, limit: usize) -> io::Result... type EnvVarRestore (line 2781) | struct EnvVarRestore { method capture (line 2787) | fn capture(key: &'static str) -> Self { method drop (line 2796) | fn drop(&mut self) { function test_full_settings_parsing (line 2805) | fn test_full_settings_parsing() { function test_partial_settings_override (line 2884) | fn test_partial_settings_override() { function test_default_settings (line 2925) | fn test_default_settings() { function test_invalid_ui_theme_type_does_not_fail_settings_parse (line 2946) | fn test_invalid_ui_theme_type_does_not_fail_settings_parse() { function test_rss_filter_legacy_regex_key_is_accepted (line 2966) | fn test_rss_filter_legacy_regex_key_is_accepted() { function test_rss_filter_mode_regex_is_parsed (line 2988) | fn test_rss_filter_mode_regex_is_parsed() { function test_invalid_torrent_state_parsing (line 3007) | fn test_invalid_torrent_state_parsing() { function test_apply_env_overrides_handles_supported_env_vars (line 3036) | fn test_apply_env_overrides_handles_supported_env_vars() { function test_apply_env_overrides_trims_numeric_env_and_matches_case_insensitively (line 3064) | fn test_apply_env_overrides_trims_numeric_env_and_matches_case_insensiti... function test_apply_env_overrides_invalid_numeric_env_reports_key (line 3084) | fn test_apply_env_overrides_invalid_numeric_env_reports_key() { function test_apply_env_overrides_rejects_empty_path_env (line 3104) | fn test_apply_env_overrides_rejects_empty_path_env() { function test_apply_env_overrides_expands_home_path_env (line 3121) | fn test_apply_env_overrides_expands_home_path_env() { function test_apply_env_overrides_ignores_unsupported_settings_vars (line 3145) | fn test_apply_env_overrides_ignores_unsupported_settings_vars() { function test_resolve_additional_watch_paths_from_sources_orders_and_deduplicates (line 3167) | fn test_resolve_additional_watch_paths_from_sources_orders_and_deduplica... function test_shared_config_dir_env_relative_path_is_resolved_from_current_dir (line 3190) | fn test_shared_config_dir_env_relative_path_is_resolved_from_current_dir... function test_shared_config_dir_env_matches_case_insensitively (line 3217) | fn test_shared_config_dir_env_matches_case_insensitively() { function test_shared_data_path_round_trip_under_root (line 3241) | fn test_shared_data_path_round_trip_under_root() { function test_shared_data_path_round_trip_allows_mount_root_itself (line 3261) | fn test_shared_data_path_round_trip_allows_mount_root_itself() { function test_shared_data_path_rejects_path_outside_root (line 3280) | fn test_shared_data_path_rejects_path_outside_root() { function test_shared_data_path_accepts_verbatim_unc_under_root (line 3300) | fn test_shared_data_path_accepts_verbatim_unc_under_root() { function test_shared_data_path_accepts_case_variant_under_root (line 3313) | fn test_shared_data_path_accepts_case_variant_under_root() { function test_resolve_host_id_uses_system_hostname_fallback (line 3325) | fn test_resolve_host_id_uses_system_hostname_fallback() { function test_resolve_host_id_prefers_explicit_override (line 3338) | fn test_resolve_host_id_prefers_explicit_override() { function test_shared_torrent_source_round_trip (line 3351) | fn test_shared_torrent_source_round_trip() { function test_layered_config_round_trips_flat_settings (line 3364) | fn test_layered_config_round_trips_flat_settings() { function test_layered_config_round_trips_shared_settings (line 3393) | fn test_layered_config_round_trips_shared_settings() { function test_catalog_and_host_merge_into_runtime_settings (line 3460) | fn test_catalog_and_host_merge_into_runtime_settings() { function test_host_override_client_id_wins_over_shared_default (line 3520) | fn test_host_override_client_id_wins_over_shared_default() { function test_fingerprint_detection_catches_stale_write (line 3540) | fn test_fingerprint_detection_catches_stale_write() { function test_write_toml_atomically_writes_file (line 3553) | fn test_write_toml_atomically_writes_file() { function test_write_shared_cluster_revision_marker_writes_file_atomically (line 3567) | fn test_write_shared_cluster_revision_marker_writes_file_atomically() { function test_normal_backend_round_trips_settings (line 3585) | fn test_normal_backend_round_trips_settings() { function test_normal_backend_load_applies_supported_env_overrides (line 3628) | fn test_normal_backend_load_applies_supported_env_overrides() { function test_normal_backend_first_run_applies_env_overrides_without_persisting_them (line 3662) | fn test_normal_backend_first_run_applies_env_overrides_without_persistin... function test_shared_backend_routes_shared_and_host_fields (line 3684) | fn test_shared_backend_routes_shared_and_host_fields() { function test_shared_catalog_backup_policy_scales_by_catalog_size (line 3772) | fn test_shared_catalog_backup_policy_scales_by_catalog_size() { function test_shared_catalog_backup_deduplicates_current_roll_window (line 3811) | fn test_shared_catalog_backup_deduplicates_current_roll_window() { function test_shared_backend_backs_up_catalog_before_overwrite (line 3848) | fn test_shared_backend_backs_up_catalog_before_overwrite() { function test_shared_backend_bootstraps_missing_host_file (line 3910) | fn test_shared_backend_bootstraps_missing_host_file() { function test_shared_backend_validates_env_overridden_default_download_folder (line 3942) | fn test_shared_backend_validates_env_overridden_default_download_folder() { function test_shared_backend_reports_missing_mount_root_clearly (line 3972) | fn test_shared_backend_reports_missing_mount_root_clearly() { function test_bootstrap_shared_host_config_error_mentions_host_and_path (line 4008) | fn test_bootstrap_shared_host_config_error_mentions_host_and_path() { function test_normal_backend_cli_load_bootstraps_missing_settings_when_local_client_is_not_running (line 4045) | fn test_normal_backend_cli_load_bootstraps_missing_settings_when_local_c... function test_normal_backend_cli_load_stays_read_only_when_local_client_is_running (line 4069) | fn test_normal_backend_cli_load_stays_read_only_when_local_client_is_run... function test_shared_backend_cli_load_bootstraps_missing_host_file (line 4104) | fn test_shared_backend_cli_load_bootstraps_missing_host_file() { function test_shared_backend_defaults_download_folder_to_mount_dir_when_unset (line 4142) | fn test_shared_backend_defaults_download_folder_to_mount_dir_when_unset() { function test_encode_shared_cli_torrent_path_returns_portable_relative_path (line 4179) | fn test_encode_shared_cli_torrent_path_returns_portable_relative_path() { function test_resolve_shared_cli_torrent_path_expands_relative_path_against_mount_root (line 4207) | fn test_resolve_shared_cli_torrent_path_expands_relative_path_against_mo... function test_shared_backend_preserves_shared_client_id_when_host_override_exists (line 4234) | fn test_shared_backend_preserves_shared_client_id_when_host_override_exi... function test_shared_backend_host_only_save_does_not_bump_cluster_revision (line 4288) | fn test_shared_backend_host_only_save_does_not_bump_cluster_revision() { function test_shared_backend_noop_save_does_not_rewrite_revision_or_metadata (line 4332) | fn test_shared_backend_noop_save_does_not_rewrite_revision_or_metadata() { function test_metadata_syncs_file_priorities_from_settings (line 4384) | fn test_metadata_syncs_file_priorities_from_settings() { function test_normal_load_settings_ignores_invalid_torrent_metadata (line 4420) | fn test_normal_load_settings_ignores_invalid_torrent_metadata() { function test_shared_load_settings_ignores_invalid_torrent_metadata (line 4456) | fn test_shared_load_settings_ignores_invalid_torrent_metadata() { function test_normal_save_settings_overwrites_invalid_torrent_metadata (line 4490) | fn test_normal_save_settings_overwrites_invalid_torrent_metadata() { function test_upsert_torrent_metadata_overwrites_invalid_metadata (line 4541) | fn test_upsert_torrent_metadata_overwrites_invalid_metadata() { function watch_env_guard (line 4572) | fn watch_env_guard() -> &'static std::sync::Mutex<()> { function shared_backend_guard (line 4576) | fn shared_backend_guard() -> &'static std::sync::Mutex<()> { function set_temp_app_paths (line 4580) | fn set_temp_app_paths() -> tempfile::TempDir { function test_persisted_shared_config_normalizes_explicit_subdir_to_mount_root (line 4589) | fn test_persisted_shared_config_normalizes_explicit_subdir_to_mount_root... function test_shared_config_env_takes_precedence_over_persisted_launcher_config (line 4611) | fn test_shared_config_env_takes_precedence_over_persisted_launcher_confi... function test_clearing_persisted_shared_config_disables_shared_mode_without_env (line 4642) | fn test_clearing_persisted_shared_config_disables_shared_mode_without_en... function test_set_persisted_shared_config_rejects_relative_paths (line 4664) | fn test_set_persisted_shared_config_rejects_relative_paths() { function test_persisted_host_id_falls_back_after_env (line 4678) | fn test_persisted_host_id_falls_back_after_env() { function test_host_id_env_takes_precedence_over_persisted_host_id (line 4712) | fn test_host_id_env_takes_precedence_over_persisted_host_id() { function test_convert_standalone_to_shared_and_back_round_trips_settings (line 4742) | fn test_convert_standalone_to_shared_and_back_round_trips_settings() { function test_configured_watch_paths_use_shared_inbox_in_shared_mode (line 4859) | fn test_configured_watch_paths_use_shared_inbox_in_shared_mode() { function test_host_watch_paths_exclude_additional_shared_config_overlaps (line 4908) | fn test_host_watch_paths_exclude_additional_shared_config_overlaps() { function test_shared_host_id_prefers_canonical_env_var (line 4952) | fn test_shared_host_id_prefers_canonical_env_var() { function test_shared_host_id_env_matches_case_insensitively (line 4985) | fn test_shared_host_id_env_matches_case_insensitively() { function test_shared_config_dir_env_normalizes_to_superseedr_config_subdir (line 5007) | fn test_shared_config_dir_env_normalizes_to_superseedr_config_subdir() { function test_shared_config_dir_env_accepts_explicit_superseedr_config_subdir (line 5059) | fn test_shared_config_dir_env_accepts_explicit_superseedr_config_subdir() { function test_classify_shared_mode_settings_change_scopes_host_only_changes (line 5094) | fn test_classify_shared_mode_settings_change_scopes_host_only_changes() { function test_runtime_watch_paths_differ_by_shared_role (line 5125) | fn test_runtime_watch_paths_differ_by_shared_role() { function test_resolve_host_watch_path_falls_back_to_local_app_watch_directory (line 5174) | fn test_resolve_host_watch_path_falls_back_to_local_app_watch_directory() { function test_shared_runtime_watch_paths_include_local_app_watch_when_host_watch_unset (line 5185) | fn test_shared_runtime_watch_paths_include_local_app_watch_when_host_wat... FILE: src/control_service.rs type TorrentFileList (line 20) | type TorrentFileList = Vec<(Vec, u64)>; type TorrentMetadataByInfoHash (line 21) | type TorrentMetadataByInfoHash = HashMap; function load_torrent_metadata_snapshot (line 23) | fn load_torrent_metadata_snapshot() -> Result String { function online_control_success_message (line 64) | pub fn online_control_success_message(request: &ControlRequest) -> String { function control_event_details (line 109) | pub fn control_event_details(request: &ControlRequest, origin: ControlOr... function load_torrent_file_list_for_settings (line 128) | pub fn load_torrent_file_list_for_settings( function load_torrent_file_list_from_metadata (line 160) | fn load_torrent_file_list_from_metadata( function file_list_from_metadata_entry (line 177) | fn file_list_from_metadata_entry(entry: &TorrentMetadataEntry) -> Vec<(V... function file_priorities_to_map (line 194) | pub fn file_priorities_to_map( type TorrentFileListEntry (line 205) | pub struct TorrentFileListEntry { type OfflinePurgePlan (line 213) | pub struct OfflinePurgePlan { function torrent_settings_by_info_hash_hex (line 219) | fn torrent_settings_by_info_hash_hex<'a>( function torrent_name_for_manifest (line 233) | fn torrent_name_for_manifest( function torrent_metadata_entry_for_settings (line 248) | fn torrent_metadata_entry_for_settings( function manifest_entries_for_torrent_settings (line 259) | fn manifest_entries_for_torrent_settings( function normalize_match_path (line 320) | fn normalize_match_path(path: &Path) -> PathBuf { function resolve_torrent_roots (line 346) | fn resolve_torrent_roots( function full_file_paths_for_torrent (line 377) | fn full_file_paths_for_torrent( function list_torrent_files (line 409) | pub fn list_torrent_files( function resolve_target_info_hash (line 430) | pub fn resolve_target_info_hash( function resolve_purge_target_info_hash (line 479) | pub fn resolve_purge_target_info_hash(settings: &Settings, target: &str)... function build_offline_purge_plan (line 483) | pub fn build_offline_purge_plan( function apply_offline_purge (line 550) | pub fn apply_offline_purge(settings: &mut Settings, info_hash_hex: &str)... type ControlExecutionPlan (line 580) | pub enum ControlExecutionPlan { function plan_control_request (line 604) | pub fn plan_control_request( function resolve_priority_file_index (line 728) | pub fn resolve_priority_file_index( function apply_offline_control_request (line 764) | pub fn apply_offline_control_request( function shared_env_guard (line 836) | fn shared_env_guard() -> &'static std::sync::Mutex<()> { function write_sample_torrent_file (line 840) | fn write_sample_torrent_file() -> (tempfile::TempDir, String) { function offline_hybrid_magnet_lookup_prefers_btih_identity (line 875) | fn offline_hybrid_magnet_lookup_prefers_btih_identity() { function offline_delete_targets_hybrid_magnet_by_btih (line 897) | fn offline_delete_targets_hybrid_magnet_by_btih() { function priority_file_path_resolution_still_requires_torrent_metadata (line 925) | fn priority_file_path_resolution_still_requires_torrent_metadata() { function files_list_uses_torrent_source_when_metadata_is_missing (line 950) | fn files_list_uses_torrent_source_when_metadata_is_missing() { function purge_target_can_resolve_from_unique_file_path (line 971) | fn purge_target_can_resolve_from_unique_file_path() { function command_specific_target_resolution_uses_callers_command_name (line 999) | fn command_specific_target_resolution_uses_callers_command_name() { function offline_purge_deletes_files_and_removes_torrent (line 1024) | fn offline_purge_deletes_files_and_removes_torrent() { function control_plan_and_offline_apply_share_pause_and_purge_mutations (line 1061) | fn control_plan_and_offline_apply_share_pause_and_purge_mutations() { function files_and_path_resolution_treat_invalid_metadata_as_missing (line 1109) | fn files_and_path_resolution_treat_invalid_metadata_as_missing() { FILE: src/dht/anomaly.rs type AnomalyConfig (line 5) | pub struct AnomalyConfig { method default (line 11) | fn default() -> Self { type ReferralQuality (line 20) | pub struct ReferralQuality { type AnomalyScore (line 26) | pub struct AnomalyScore { FILE: src/dht/bep42.rs constant IPV4_MASK (line 8) | const IPV4_MASK: u32 = 0x030f3fff; constant CRC32C_POLY_REVERSED (line 9) | const CRC32C_POLY_REVERSED: u32 = 0x82f63b78; function classify_node (line 11) | pub fn classify_node(addr: SocketAddr, node_id: Option) -> Bep42... function classify_ipv4 (line 22) | pub fn classify_ipv4(ip: Ipv4Addr, node_id: NodeId) -> Bep42State { function random_secure_node_id_for_ipv4 (line 35) | pub fn random_secure_node_id_for_ipv4(ip: Ipv4Addr) -> Option { function secure_node_id_for_ipv4 (line 41) | pub fn secure_node_id_for_ipv4(ip: Ipv4Addr, mut entropy: [u8; NodeId::L... function is_secure_public_candidate (line 53) | pub fn is_secure_public_candidate( function same_public_identity_group (line 63) | pub fn same_public_identity_group( function classify_ipv6 (line 95) | fn classify_ipv6(ip: Ipv6Addr, _node_id: NodeId) -> Bep42State { function ipv4_is_exempt (line 104) | fn ipv4_is_exempt(ip: Ipv4Addr) -> bool { function first_21_bits (line 113) | fn first_21_bits(bytes: &[u8]) -> [u8; 3] { function id_prefix_ipv4 (line 117) | fn id_prefix_ipv4(ip: Ipv4Addr, r: u8) -> [u8; 3] { function crc32c (line 130) | fn crc32c(bytes: [u8; 4]) -> u32 { function validates_known_bep42_vector (line 147) | fn validates_known_bep42_vector() { function marks_loopback_ipv4_as_exempt (line 158) | fn marks_loopback_ipv4_as_exempt() { function generated_ipv4_node_id_is_bep42_compliant (line 166) | fn generated_ipv4_node_id_is_bep42_compliant() { function generated_ipv4_node_id_rejects_exempt_addresses (line 175) | fn generated_ipv4_node_id_rejects_exempt_addresses() { FILE: src/dht/bootstrap.rs type BootstrapConfig (line 11) | pub struct BootstrapConfig { method default (line 20) | fn default() -> Self { type StartupLookupPlan (line 32) | pub struct StartupLookupPlan { type FamilyMaintenancePlan (line 38) | pub struct FamilyMaintenancePlan { type BootstrapCoordinator (line 45) | pub struct BootstrapCoordinator { method new (line 51) | pub fn new(config: BootstrapConfig) -> Self { method config (line 58) | pub fn config(&self) -> &BootstrapConfig { method set_bootstrap_nodes (line 62) | pub fn set_bootstrap_nodes(&mut self, bootstrap_nodes: Vec) { method startup_plan (line 66) | pub fn startup_plan( method maintenance_plan (line 80) | pub fn maintenance_plan( FILE: src/dht/health.rs type DhtAnomalySummary (line 11) | pub struct DhtAnomalySummary { type DhtHealthSnapshot (line 19) | pub struct DhtHealthSnapshot { method from_parts (line 42) | pub fn from_parts( function summarize_anomalies (line 96) | fn summarize_anomalies( FILE: src/dht/inbound.rs constant ERROR_PROTOCOL (line 13) | const ERROR_PROTOCOL: i64 = 203; constant RATE_LIMITER_IDLE_TTL (line 14) | const RATE_LIMITER_IDLE_TTL: Duration = Duration::from_secs(300); constant RATE_LIMITER_PRUNE_INTERVAL (line 15) | const RATE_LIMITER_PRUNE_INTERVAL: Duration = Duration::from_secs(30); constant MAX_RATE_LIMITER_ENTRIES (line 16) | const MAX_RATE_LIMITER_ENTRIES: usize = 16_384; constant DEFAULT_RESPONSE_BYTES_PER_SECOND (line 17) | const DEFAULT_RESPONSE_BYTES_PER_SECOND: usize = 32 * 1024; constant DEFAULT_RESPONSE_BURST_BYTES (line 18) | const DEFAULT_RESPONSE_BURST_BYTES: usize = 64 * 1024; type InboundConfig (line 21) | pub struct InboundConfig { method default (line 31) | fn default() -> Self { type InboundRequestContext (line 44) | pub struct InboundRequestContext { type InboundAction (line 49) | pub enum InboundAction { type RateLimiter (line 56) | struct RateLimiter { type InboundActor (line 65) | pub struct InboundActor { method new (line 72) | pub fn new(config: InboundConfig) -> Self { method family (line 80) | pub fn family(&self) -> AddressFamily { method config (line 84) | pub fn config(&self) -> &InboundConfig { method handle_query (line 89) | pub fn handle_query( method allow_query (line 263) | fn allow_query(&mut self, source_ip: IpAddr, now: Instant) -> bool { method allow_response_bytes (line 300) | fn allow_response_bytes(&mut self, source_ip: IpAddr, bytes: usize, no... method respond_to (line 336) | fn respond_to( method error_to (line 352) | fn error_to( method prune_stale_rate_limiters (line 367) | fn prune_stale_rate_limiters(&mut self, now: Instant) { method closest_nodes_for (line 384) | fn closest_nodes_for( method append_requested_cross_family_nodes (line 404) | fn append_requested_cross_family_nodes( function remember_inbound_node (line 428) | fn remember_inbound_node( function source_ip (line 451) | fn source_ip(index: usize) -> IpAddr { function node_id (line 460) | fn node_id(byte: u8) -> NodeId { function info_hash (line 464) | fn info_hash(byte: u8) -> InfoHash { function rate_limiter_prunes_idle_sources (line 469) | fn rate_limiter_prunes_idle_sources() { function rate_limiter_rejects_new_sources_at_hard_cap (line 485) | fn rate_limiter_rejects_new_sources_at_hard_cap() { function response_byte_limiter_rejects_excess_payload_bytes (line 500) | fn response_byte_limiter_rejects_excess_payload_bytes() { function get_peers_response_includes_values_and_closest_nodes (line 515) | fn get_peers_response_includes_values_and_closest_nodes() { function get_peers_want_includes_cross_family_nodes (line 574) | fn get_peers_want_includes_cross_family_nodes() { function get_peers_withholds_token_when_peer_store_is_full_for_hash (line 632) | fn get_peers_withholds_token_when_peer_store_is_full_for_hash() { FILE: src/dht/krpc.rs constant DEFAULT_KRPC_VERSION (line 13) | pub const DEFAULT_KRPC_VERSION: &[u8; 4] = b"RS\0\x05"; constant MAX_KRPC_MESSAGE_BYTES (line 14) | const MAX_KRPC_MESSAGE_BYTES: usize = 8 * 1024; constant MAX_BENCODE_DEPTH (line 15) | const MAX_BENCODE_DEPTH: usize = 16; constant MAX_BENCODE_TOKENS (line 16) | const MAX_BENCODE_TOKENS: usize = 512; constant WANT_IPV4_NODES (line 17) | const WANT_IPV4_NODES: &[u8; 2] = b"n4"; constant WANT_IPV6_NODES (line 18) | const WANT_IPV6_NODES: &[u8; 2] = b"n6"; type KrpcQueryKind (line 21) | pub enum KrpcQueryKind { method as_str (line 29) | pub const fn as_str(self) -> &'static str { type KrpcQueryEnvelope (line 40) | pub struct KrpcQueryEnvelope { method serialize (line 53) | fn serialize(&self, serializer: S) -> Result type KrpcDecodedQueryEnvelope (line 80) | struct KrpcDecodedQueryEnvelope { function new (line 94) | pub fn new(transaction_id: TransactionId, query: KrpcQueryKind, args: A)... function with_version (line 98) | pub fn with_version( type KrpcPingArgs (line 116) | pub struct KrpcPingArgs { method new (line 121) | pub fn new(id: NodeId) -> Self { method serialize (line 129) | fn serialize(&self, serializer: S) -> Result type KrpcFindNodeArgs (line 140) | pub struct KrpcFindNodeArgs { method new (line 148) | pub fn new(id: NodeId, target: NodeId) -> Self { method with_want (line 156) | pub fn with_want(mut self, families: &[AddressFamily]) -> Self { method wants_family (line 161) | pub fn wants_family(&self, family: AddressFamily) -> bool { method serialize (line 167) | fn serialize(&self, serializer: S) -> Result type KrpcGetPeersArgs (line 182) | pub struct KrpcGetPeersArgs { method new (line 190) | pub fn new(id: NodeId, info_hash: InfoHash) -> Self { method with_want (line 198) | pub fn with_want(mut self, families: &[AddressFamily]) -> Self { method wants_family (line 203) | pub fn wants_family(&self, family: AddressFamily) -> bool { method serialize (line 209) | fn serialize(&self, serializer: S) -> Result type KrpcAnnouncePeerArgs (line 224) | pub struct KrpcAnnouncePeerArgs { method new (line 234) | pub fn new( method serialize (line 252) | fn serialize(&self, serializer: S) -> Result type KrpcIncomingQuery (line 270) | pub enum KrpcIncomingQuery { method kind (line 294) | pub fn kind(&self) -> KrpcQueryKind { method transaction_id (line 303) | pub fn transaction_id(&self) -> &[u8] { method version (line 312) | pub fn version(&self) -> Option<&[u8]> { method requester_id (line 321) | pub fn requester_id(&self) -> Option { type KrpcInboundMessage (line 332) | pub enum KrpcInboundMessage { type KrpcResponseEnvelope (line 339) | pub struct KrpcResponseEnvelope { method new (line 382) | pub fn new(transaction_id: &[u8], body: KrpcResponseBody) -> Self { method with_observed_addr (line 392) | pub fn with_observed_addr(mut self, addr: SocketAddr) -> Self { method observed_addr (line 397) | pub fn observed_addr(&self) -> Option { method transaction_id (line 403) | pub fn transaction_id(&self) -> Result { method serialize (line 351) | fn serialize(&self, serializer: S) -> Result type KrpcErrorEnvelope (line 409) | pub struct KrpcErrorEnvelope { method new (line 434) | pub fn new(transaction_id: &[u8], code: i64, message: impl Into Result { method serialize (line 418) | fn serialize(&self, serializer: S) -> Result type KrpcErrorBody (line 449) | pub struct KrpcErrorBody(pub i64, pub String); type KrpcResponseBody (line 452) | pub struct KrpcResponseBody { method pong (line 508) | pub fn pong(node_id: NodeId) -> Self { method with_nodes (line 515) | pub fn with_nodes(node_id: NodeId, nodes: &[CompactNode], family: Addr... method with_peers (line 524) | pub fn with_peers(node_id: NodeId, peers: &[CompactPeer], token: &[u8]... method with_peers_and_nodes (line 534) | pub fn with_peers_and_nodes( method with_closest_nodes (line 549) | pub fn with_closest_nodes( method node_id (line 560) | pub fn node_id(&self) -> Option { method peers (line 564) | pub fn peers(&self, family: AddressFamily) -> Vec { method closest_nodes (line 571) | pub fn closest_nodes(&self, family: AddressFamily) -> Vec { method set_closest_nodes (line 578) | pub fn set_closest_nodes(&mut self, family: AddressFamily, nodes: &[Co... method serialize (line 466) | fn serialize(&self, serializer: S) -> Result function encode_want_entries (line 586) | fn encode_want_entries(families: &[AddressFamily]) -> Vec { function wants_family (line 597) | fn wants_family(entries: &[ByteBuf], family: AddressFamily) -> bool { type KrpcEnvelopeProbe (line 606) | struct KrpcEnvelopeProbe { type KrpcDecodeError (line 614) | pub enum KrpcDecodeError { function decode_message (line 633) | pub fn decode_message(bytes: &[u8]) -> Result Result<(), KrpcDecodeError> { function validate_bencode_value (line 659) | fn validate_bencode_value( function validate_bencode_integer (line 694) | fn validate_bencode_integer(bytes: &[u8], mut pos: usize) -> Result Result Vec<... function encode_compact_peer (line 802) | pub fn encode_compact_peer(peer: CompactPeer) -> ByteBuf { function decode_compact_nodes (line 819) | pub fn decode_compact_nodes(bytes: &[u8], family: AddressFamily) -> Vec<... function encode_compact_nodes (line 853) | pub fn encode_compact_nodes(nodes: &[CompactNode], family: AddressFamily... function decode_compact_socket_addr (line 882) | pub fn decode_compact_socket_addr(bytes: &[u8]) -> Option { function encode_compact_socket_addr (line 899) | pub fn encode_compact_socket_addr(addr: SocketAddr) -> ByteBuf { function outbound_queries_do_not_advertise_read_only_by_default (line 921) | fn outbound_queries_do_not_advertise_read_only_by_default() { function get_peers_want_entries_round_trip (line 939) | fn get_peers_want_entries_round_trip() { function find_node_want_entries_round_trip (line 954) | fn find_node_want_entries_round_trip() { function response_observed_addr_round_trips_compact_ip (line 969) | fn response_observed_addr_round_trips_compact_ip() { function decode_message_rejects_oversized_payload_before_deserialize (line 984) | fn decode_message_rejects_oversized_payload_before_deserialize() { function decode_message_rejects_excessive_bencode_depth (line 994) | fn decode_message_rejects_excessive_bencode_depth() { function decode_message_rejects_excessive_bencode_tokens (line 1007) | fn decode_message_rejects_excessive_bencode_tokens() { FILE: src/dht/lookup.rs type LookupKind (line 17) | pub enum LookupKind { type LookupTarget (line 23) | pub enum LookupTarget { method as_node_id (line 29) | pub fn as_node_id(self) -> NodeId { type LookupConfig (line 38) | pub struct LookupConfig { method default (line 48) | fn default() -> Self { type LookupRequest (line 61) | pub struct LookupRequest { type LookupCandidate (line 68) | pub struct LookupCandidate { type LookupQuery (line 81) | pub struct LookupQuery { type LookupUpdate (line 89) | pub struct LookupUpdate { method new (line 97) | fn new(completed_query: Option, finished: bool) -> Self { type LookupResponder (line 108) | struct LookupResponder { type LookupState (line 116) | pub struct LookupState { method request (line 200) | pub fn request(&self) -> LookupRequest { method family (line 204) | pub fn family(&self) -> AddressFamily { method target_id (line 208) | pub fn target_id(&self) -> NodeId { method started_at (line 212) | pub fn started_at(&self) -> Instant { method inflight_transaction_ids (line 216) | pub fn inflight_transaction_ids(&self) -> Vec { method quality_snapshot (line 220) | pub fn quality_snapshot(&self) -> LookupQualitySnapshot { method park (line 230) | pub fn park(&mut self) { method resume (line 242) | pub fn resume(&mut self, lookup_id: LookupId, now: Instant) { method next_candidates (line 247) | pub fn next_candidates(&self) -> Vec { method mark_inflight (line 277) | pub fn mark_inflight( method mark_soft_timeout (line 303) | pub fn mark_soft_timeout(&mut self, transaction_id: TransactionId) -> ... method handle_response (line 312) | pub fn handle_response( method handle_error (line 347) | pub fn handle_error(&mut self, transaction_id: TransactionId) -> Looku... method handle_timeout (line 352) | pub fn handle_timeout(&mut self, transaction_id: TransactionId) -> Loo... method discard_candidate (line 357) | pub fn discard_candidate(&mut self, addr: SocketAddr) -> bool { method is_finished (line 370) | pub fn is_finished(&self) -> bool { method cacheable_responders (line 407) | pub fn cacheable_responders(&self, limit: usize) -> Vec { method seed_from_routing (line 428) | fn seed_from_routing(&mut self, routing: &RoutingSnapshot, prefer_boot... method seed_cached_responders (line 449) | fn seed_cached_responders(&mut self, cached_responders: &[NodeRecord]) { method seed_bootstrap (line 459) | fn seed_bootstrap(&mut self, bootstrap_nodes: &[SocketAddr], prefer_bo... method absorb_discovered_nodes (line 482) | fn absorb_discovered_nodes(&mut self, nodes: Vec) -> Vec<... method insert_candidate (line 524) | fn insert_candidate(&mut self, candidate: LookupCandidate) -> bool { method record_responder (line 537) | fn record_responder(&mut self, candidate: &LookupCandidate) { method eligible_responders (line 569) | fn eligible_responders(&self) -> Vec { method prefix_count (line 577) | fn prefix_count(&self, addr: SocketAddr) -> usize { method resort_frontier (line 590) | fn resort_frontier(&mut self) { method next_order (line 596) | fn next_order(&mut self) -> u64 { method conflicts_with_existing_public_identity (line 602) | fn conflicts_with_existing_public_identity(&self, candidate: &LookupCa... type LookupQualitySnapshot (line 130) | pub struct LookupQualitySnapshot { type LookupManager (line 139) | pub struct LookupManager { method new (line 144) | pub fn new(config: LookupConfig) -> Self { method config (line 148) | pub fn config(&self) -> &LookupConfig { method start (line 152) | pub fn start( function candidate_from_record (line 634) | fn candidate_from_record( function compare_candidates (line 652) | fn compare_candidates( function compare_responders (line 670) | fn compare_responders( function compare_responder_candidate (line 682) | fn compare_responder_candidate( function compare_seed_records (line 694) | fn compare_seed_records(left: &NodeRecord, right: &NodeRecord, target: &... function compare_candidate_distance (line 702) | fn compare_candidate_distance( function termination_eligible (line 715) | fn termination_eligible(candidate: &LookupCandidate) -> bool { function termination_eligible_responder (line 721) | fn termination_eligible_responder(candidate: &LookupResponder) -> bool { function trust_rank (line 727) | fn trust_rank(trust: NodeTrust) -> u8 { function bep42_rank (line 735) | fn bep42_rank(state: Bep42State) -> u8 { function referral_quality_rank (line 744) | fn referral_quality_rank(candidate: &LookupCandidate) -> (u16, u16) { function response_recency_rank (line 751) | fn response_recency_rank(last_response_at: Option) -> (u8, Opti... function responder_conflicts (line 758) | fn responder_conflicts(existing: &LookupResponder, candidate: &LookupCan... type PrefixKey (line 770) | enum PrefixKey { function prefix_key (line 775) | fn prefix_key(addr: SocketAddr) -> PrefixKey { type ScriptedReply (line 802) | enum ScriptedReply { type LookupReplySpec (line 815) | enum LookupReplySpec { function lookup_reply_strategy (line 829) | fn lookup_reply_strategy() -> impl Strategy { function assert_lookup_state_invariants (line 849) | fn assert_lookup_state_invariants(state: &LookupState) -> Result<(), Tes... function scripted_replay_walk_reaches_peers (line 885) | fn scripted_replay_walk_reaches_peers() { function repeated_same_node_referrals_only_admit_one_candidate (line 1032) | fn repeated_same_node_referrals_only_admit_one_candidate() { function park_requeues_inflight_candidates_for_resume (line 1072) | fn park_requeues_inflight_candidates_for_resume() { function visit_cap_finishes_lookup_even_when_frontier_remains (line 1114) | fn visit_cap_finishes_lookup_even_when_frontier_remains() { function empty_routing_snapshot (line 1304) | fn empty_routing_snapshot(family: AddressFamily) -> RoutingSnapshot { function public_compact_node (line 1314) | fn public_compact_node(seed: u8, salt: u8) -> CompactNode { function public_compact_peer (line 1325) | fn public_compact_peer(seed: u8, salt: u8) -> CompactPeer { function compact_node (line 1335) | fn compact_node(seed: u8, a: u8, b: u8, c: u8, d: u8, port: u16) -> Comp... function compact_peer (line 1342) | fn compact_peer(a: u8, b: u8, c: u8, d: u8, port: u16) -> CompactPeer { function socket (line 1348) | fn socket(a: u8, b: u8, c: u8, d: u8, port: u16) -> SocketAddr { FILE: src/dht/mod.rs constant MAX_CACHED_RESPONDER_TARGETS (line 63) | const MAX_CACHED_RESPONDER_TARGETS: usize = 256; constant MAX_CACHED_RESPONDERS_PER_TARGET (line 64) | const MAX_CACHED_RESPONDERS_PER_TARGET: usize = 16; type RuntimeConfig (line 67) | pub struct RuntimeConfig { type ActiveLookup (line 78) | struct ActiveLookup { type LookupRunMode (line 86) | enum LookupRunMode { method is_active (line 92) | fn is_active(self) -> bool { method is_draining (line 96) | fn is_draining(self) -> bool { type LookupTaskOutcome (line 103) | enum LookupTaskOutcome { type LookupTaskResult (line 110) | struct LookupTaskResult { type AnnouncePeerJob (line 117) | pub(crate) struct AnnouncePeerJob { method run (line 130) | pub(crate) async fn run(self) -> bool { type AnnouncePeerTarget (line 124) | struct AnnouncePeerTarget { type Runtime (line 158) | pub struct Runtime { method bind (line 187) | pub async fn bind(config: RuntimeConfig) -> io::Result { method config (line 300) | pub fn config(&self) -> &RuntimeConfig { method local_node_id (line 304) | pub fn local_node_id(&self) -> NodeId { method family_bound (line 308) | pub fn family_bound(&self, family: AddressFamily) -> bool { method ipv4_local_addr (line 312) | pub fn ipv4_local_addr(&self) -> Option { method ipv6_local_addr (line 318) | pub fn ipv6_local_addr(&self) -> Option { method bound_family_count (line 324) | pub fn bound_family_count(&self) -> usize { method active_lookup_count (line 328) | pub fn active_lookup_count(&self) -> usize { method active_user_lookup_count (line 335) | pub fn active_user_lookup_count(&self) -> usize { method is_lookup_active (line 345) | pub fn is_lookup_active(&self, lookup_id: LookupId) -> bool { method draining_lookup_count (line 349) | pub fn draining_lookup_count(&self) -> usize { method inflight_query_counts (line 356) | pub fn inflight_query_counts(&self) -> (usize, usize) { method lookup_quality_snapshot (line 370) | pub fn lookup_quality_snapshot(&self, lookup_id: LookupId) -> Option usize { method health_snapshot (line 384) | pub fn health_snapshot(&self) -> DhtHealthSnapshot { method record_responsive_bootstrap (line 409) | fn record_responsive_bootstrap(&mut self, addr: SocketAddr) { method responsive_bootstrap_counts (line 415) | fn responsive_bootstrap_counts(&self) -> (usize, usize, usize) { method save_state (line 435) | pub async fn save_state(&self) -> io::Result<()> { method shutdown_for_rebind (line 452) | pub async fn shutdown_for_rebind(&mut self, wait: Duration) { method bootstrap_startup (line 484) | pub async fn bootstrap_startup(&mut self) -> io::Result<()> { method run_maintenance (line 502) | pub async fn run_maintenance(&mut self) -> io::Result<()> { method start_lookup (line 535) | pub async fn start_lookup( method refresh_bootstrap_nodes_if_empty (line 595) | async fn refresh_bootstrap_nodes_if_empty(&mut self) { method start_lookup_with_state (line 609) | pub async fn start_lookup_with_state( method start_get_peers (line 644) | pub async fn start_get_peers( method start_get_peers_with_state (line 657) | pub async fn start_get_peers_with_state( method start_find_node (line 675) | pub async fn start_find_node( method announce_peer (line 684) | pub async fn announce_peer( method announce_peer_job (line 761) | pub(crate) fn announce_peer_job( method step (line 806) | pub async fn step(&mut self) -> io::Result { method handle_transport_event (line 881) | async fn handle_transport_event( method handle_lookup_result (line 945) | async fn handle_lookup_result(&mut self, result: LookupTaskResult) -> ... method apply_confirmed_public_identity (line 1083) | fn apply_confirmed_public_identity(&mut self, confirmed: Option io::Result<()> { method transport_for (line 1252) | fn transport_for(&self, family: AddressFamily) -> Option<&TransportAct... method routing_for_family_mut (line 1259) | fn routing_for_family_mut(&mut self, family: AddressFamily) -> &mut ro... method routing_for_family (line 1266) | fn routing_for_family(&self, family: AddressFamily) -> &routing::Routi... method wanted_node_families (line 1273) | fn wanted_node_families(&self) -> Vec { method cleanup_closed_lookups (line 1280) | fn cleanup_closed_lookups(&mut self) { method cancel_lookup (line 1294) | pub fn cancel_lookup(&mut self, lookup_id: LookupId) -> bool { method pause_lookup_for_drain (line 1298) | pub fn pause_lookup_for_drain(&mut self, lookup_id: LookupId) -> Optio... method drained_lookups_ready (line 1304) | pub fn drained_lookups_ready(&self, lookup_ids: &[LookupId]) -> bool { method finish_drained_lookup (line 1312) | pub fn finish_drained_lookup(&mut self, lookup_id: LookupId) -> Option... method cancel_lookup_and_take_state (line 1333) | pub fn cancel_lookup_and_take_state(&mut self, lookup_id: LookupId) ->... method cancel_maintenance_lookups (line 1349) | pub fn cancel_maintenance_lookups(&mut self) { method cache_lookup_responders (line 1360) | fn cache_lookup_responders(&mut self, family: AddressFamily, state: &L... method start_internal_find_node (line 1376) | async fn start_internal_find_node( method has_active_find_node (line 1392) | fn has_active_find_node(&self, family: AddressFamily, target: NodeId) ... method ping_nodes (line 1400) | async fn ping_nodes( method enqueue_probe_targets (line 1444) | fn enqueue_probe_targets(&mut self, family: AddressFamily, targets: &[... method take_pending_probe_targets (line 1450) | fn take_pending_probe_targets( function node_id_hex (line 1471) | fn node_id_hex(node_id: NodeId) -> String { function opposite_family (line 1475) | fn opposite_family(family: AddressFamily) -> AddressFamily { function resolve_bootstrap_sources (line 1482) | async fn resolve_bootstrap_sources(bootstrap_sources: &[String]) -> Vec<... function announce_peer_to_target (line 1500) | async fn announce_peer_to_target( type ReplayBehavior (line 1545) | enum ReplayBehavior { type QueryLogEntry (line 1551) | struct QueryLogEntry { function spawn_replay_responder (line 1557) | async fn spawn_replay_responder( function spawn_delayed_get_peers_responder (line 1638) | async fn spawn_delayed_get_peers_responder( function wait_for_query (line 1705) | async fn wait_for_query( function runtime_bind_requires_ipv4_transport (line 1728) | async fn runtime_bind_requires_ipv4_transport() { function runtime_bind_continues_without_ipv6_when_ipv6_port_is_unavailable (line 1745) | async fn runtime_bind_continues_without_ipv6_when_ipv6_port_is_unavailab... function runtime_does_not_register_lookup_without_seed_candidates (line 1773) | async fn runtime_does_not_register_lookup_without_seed_candidates() { function runtime_tracks_unique_responsive_bootstrap_nodes_by_family (line 1798) | async fn runtime_tracks_unique_responsive_bootstrap_nodes_by_family() { function runtime_rotates_local_node_id_after_confirmed_public_ipv4 (line 1826) | async fn runtime_rotates_local_node_id_after_confirmed_public_ipv4() { function runtime_keeps_configured_local_node_id_when_public_identity_disabled (line 1869) | async fn runtime_keeps_configured_local_node_id_when_public_identity_dis... function ipv6_test_bind_unavailable (line 1889) | fn ipv6_test_bind_unavailable(error: &io::Error) -> bool { function runtime_re_resolves_bootstrap_sources_when_initial_resolution_was_empty (line 1899) | async fn runtime_re_resolves_bootstrap_sources_when_initial_resolution_w... function runtime_scripted_network_replay_reaches_peers (line 1963) | async fn runtime_scripted_network_replay_reaches_peers() { function runtime_bind_restores_persisted_routes_only_for_matching_node_id (line 2153) | async fn runtime_bind_restores_persisted_routes_only_for_matching_node_i... function draining_lookup_accepts_late_peers_without_pumping_more_queries (line 2222) | async fn draining_lookup_accepts_late_peers_without_pumping_more_queries... FILE: src/dht/peer_store.rs type PeerStoreConfig (line 9) | pub struct PeerStoreConfig { method default (line 17) | fn default() -> Self { type StoredPeer (line 28) | pub struct StoredPeer { type PeerStoreKey (line 35) | struct PeerStoreKey { type PeerStore (line 41) | pub struct PeerStore { method new (line 47) | pub fn new(config: PeerStoreConfig) -> Self { method config (line 54) | pub fn config(&self) -> &PeerStoreConfig { method total_peer_count (line 58) | pub fn total_peer_count(&self) -> usize { method insert (line 62) | pub fn insert(&mut self, info_hash: InfoHash, peer: CompactPeer, now: ... method accepts_announces_for (line 91) | pub fn accepts_announces_for( method peers_for (line 109) | pub fn peers_for( method prune_expired (line 122) | pub fn prune_expired(&mut self, now: SystemTime) { method enforce_global_limit (line 132) | fn enforce_global_limit(&mut self) { method evict_oldest_bucket (line 148) | fn evict_oldest_bucket(&mut self) { method oldest_peer_entry (line 161) | fn oldest_peer_entry(&self) -> Option<(PeerStoreKey, usize)> { function info_hash (line 180) | fn info_hash(byte: u8) -> InfoHash { function peer (line 184) | fn peer(octet: u8) -> CompactPeer { function accepts_announces_for_rejects_full_hash_bucket (line 191) | fn accepts_announces_for_rejects_full_hash_bucket() { function accepts_announces_for_rejects_global_pressure (line 205) | fn accepts_announces_for_rejects_global_pressure() { FILE: src/dht/persist.rs constant PERSISTENCE_VERSION (line 13) | const PERSISTENCE_VERSION: u32 = 1; type PersistenceConfig (line 16) | pub struct PersistenceConfig { type PersistedRoutingNode (line 22) | pub struct PersistedRoutingNode { method from_record (line 153) | fn from_record(record: &NodeRecord) -> Self { method to_record (line 166) | fn to_record(&self, now: Instant) -> NodeRecord { type PersistedRoutingTable (line 34) | pub struct PersistedRoutingTable { type PersistedStateEnvelope (line 42) | pub struct PersistedStateEnvelope { type PersistenceManager (line 51) | pub struct PersistenceManager { method new (line 56) | pub fn new(config: PersistenceConfig) -> Self { method config (line 60) | pub fn config(&self) -> &PersistenceConfig { method build_snapshot (line 64) | pub fn build_snapshot( method save_snapshot (line 96) | pub fn save_snapshot(&self, snapshot: &PersistedStateEnvelope) -> io::... method load_snapshot (line 119) | pub fn load_snapshot(&self, now: SystemTime) -> io::Result NodeTrust { function persisted_node (line 190) | fn persisted_node( function restore_nodes_neutralizes_stale_suspicious_trust (line 209) | fn restore_nodes_neutralizes_stale_suspicious_trust() { function restore_nodes_preserves_trusted_routes (line 219) | fn restore_nodes_preserves_trusted_routes() { function restore_nodes_normalizes_mixed_legacy_route_trust (line 227) | fn restore_nodes_normalizes_mixed_legacy_route_trust() { function load_snapshot_ignores_invalid_stale_and_unsupported_files (line 267) | fn load_snapshot_ignores_invalid_stale_and_unsupported_files() { FILE: src/dht/public_addr.rs constant PUBLIC_ADDRESS_QUORUM (line 8) | const PUBLIC_ADDRESS_QUORUM: usize = 3; constant MAX_PUBLIC_ADDRESS_CANDIDATES (line 9) | const MAX_PUBLIC_ADDRESS_CANDIDATES: usize = 64; type PublicAddressObserver (line 12) | pub struct PublicAddressObserver { method record_observation (line 19) | pub fn record_observation( method confirmed_for (line 48) | pub fn confirmed_for(&self, family: AddressFamily) -> Option SocketAddr { function public_address_requires_quorum (line 78) | fn public_address_requires_quorum() { function duplicate_voter_does_not_satisfy_quorum (line 92) | fn duplicate_voter_does_not_satisfy_quorum() { FILE: src/dht/routing.rs constant GOOD_NODE_WINDOW (line 13) | pub const GOOD_NODE_WINDOW: Duration = Duration::from_secs(15 * 60); constant REFRESH_INTERVAL (line 14) | pub const REFRESH_INTERVAL: Duration = Duration::from_secs(15 * 60); constant BAD_NODE_FAILURE_THRESHOLD (line 15) | pub const BAD_NODE_FAILURE_THRESHOLD: u16 = 2; type RoutingConfig (line 18) | pub struct RoutingConfig { method default (line 25) | fn default() -> Self { type NodeStatus (line 35) | pub enum NodeStatus { type BucketRange (line 42) | pub struct BucketRange { type BucketSummary (line 49) | pub struct BucketSummary { type RoutingSnapshot (line 57) | pub struct RoutingSnapshot { type RefreshPlan (line 66) | pub struct RefreshPlan { type InsertOutcome (line 73) | pub enum InsertOutcome { type BucketPrefix (line 83) | struct BucketPrefix { method root (line 89) | fn root() -> Self { method contains (line 96) | fn contains(&self, node_id: &NodeId) -> bool { method split (line 100) | fn split(&self) -> Option<(Self, Self)> { method range (line 120) | fn range(&self) -> BucketRange { method random_target (line 135) | fn random_target(&self) -> NodeId { type Bucket (line 146) | struct Bucket { method new (line 154) | fn new(prefix: BucketPrefix, now: Instant) -> Self { method contains_local_id (line 163) | fn contains_local_id(&self, local_node_id: &NodeId) -> bool { method summary (line 167) | fn summary(&self) -> BucketSummary { type RoutingTable (line 178) | pub struct RoutingTable { method new (line 185) | pub fn new(local_node_id: NodeId, config: RoutingConfig, now: Instant)... method family (line 193) | pub fn family(&self) -> AddressFamily { method local_node_id (line 197) | pub fn local_node_id(&self) -> NodeId { method set_local_node_id (line 201) | pub fn set_local_node_id(&mut self, local_node_id: NodeId) { method bucket_count (line 205) | pub fn bucket_count(&self) -> usize { method all_nodes (line 209) | pub fn all_nodes(&self) -> Vec { method snapshot (line 216) | pub fn snapshot(&self, now: Instant) -> RoutingSnapshot { method insert (line 236) | pub fn insert(&mut self, mut candidate: NodeRecord, now: Instant) -> I... method record_query_sent (line 294) | pub fn record_query_sent(&mut self, addr: SocketAddr, now: Instant) ->... method record_response (line 301) | pub fn record_response( method record_inbound_query (line 314) | pub fn record_inbound_query( method record_failure (line 335) | pub fn record_failure(&mut self, addr: SocketAddr, now: Instant) -> bo... method closest_nodes (line 342) | pub fn closest_nodes(&self, target: NodeId, limit: usize) -> Vec Vec Vec { method bucket_index_for (line 389) | fn bucket_index_for(&self, node_id: &NodeId) -> usize { method split_bucket (line 396) | fn split_bucket(&mut self, bucket_index: usize, now: Instant) -> bool { method update_existing (line 435) | fn update_existing( method queue_replacement (line 464) | fn queue_replacement(&mut self, bucket_index: usize, candidate: NodeRe... method with_record_mut (line 475) | fn with_record_mut(&mut self, addr: SocketAddr, mut apply: F) -> bool method has_blocking_public_identity_conflict (line 500) | fn has_blocking_public_identity_conflict( type RoutingActor (line 542) | pub struct RoutingActor { method new (line 547) | pub fn new(local_node_id: NodeId, config: RoutingConfig, now: Instant)... method family (line 553) | pub fn family(&self) -> AddressFamily { method table (line 557) | pub fn table(&self) -> &RoutingTable { method table_mut (line 561) | pub fn table_mut(&mut self) -> &mut RoutingTable { method set_local_node_id (line 565) | pub fn set_local_node_id(&mut self, local_node_id: NodeId) { function node_status (line 570) | pub fn node_status(record: &NodeRecord, now: Instant) -> NodeStatus { function xor_distance (line 593) | pub fn xor_distance(left: &NodeId, right: &NodeId) -> [u8; 20] { function compare_distance (line 606) | fn compare_distance(left: Option, right: Option, target:... function compare_record_distance (line 615) | fn compare_record_distance(left: &NodeRecord, right: &NodeRecord, target... function compare_replacement_priority (line 622) | fn compare_replacement_priority(left: &NodeRecord, right: &NodeRecord, n... function questionable_probe_targets (line 636) | fn questionable_probe_targets(bucket: &Bucket, now: Instant) -> Vec... function node_status_rank (line 676) | fn node_status_rank(status: NodeStatus) -> u8 { function response_presence_rank (line 684) | fn response_presence_rank(last_response_at: Option) -> u8 { function least_recently_seen_at (line 692) | fn least_recently_seen_at(record: &NodeRecord) -> Option { function merge_record (line 701) | fn merge_record(target: &mut NodeRecord, candidate: &NodeRecord, now: In... function merge_trust (line 738) | fn merge_trust(current: NodeTrust, candidate: NodeTrust) -> NodeTrust { function trust_rank (line 746) | fn trust_rank(trust: NodeTrust) -> u8 { function bep42_rank (line 754) | fn bep42_rank(state: Bep42State) -> u8 { function prefix_matches (line 763) | fn prefix_matches(prefix: &[u8; 20], prefix_len: u8, candidate: &[u8; 20... function bit_at (line 772) | fn bit_at(bytes: &[u8; 20], bit_idx: u8) -> bool { function set_bit (line 778) | fn set_bit(bytes: &mut [u8; 20], bit_idx: u8, value: bool) { function node_id (line 794) | fn node_id(byte: u8) -> NodeId { function bep42_vector_node_id (line 798) | fn bep42_vector_node_id() -> NodeId { function responded_record (line 805) | fn responded_record(addr: SocketAddr, node_id: NodeId, now: Instant) -> ... function record_response_records_node_id_churn_without_distrusting (line 812) | fn record_response_records_node_id_churn_without_distrusting() { function non_compliant_bep42_node_keeps_neutral_trust (line 828) | fn non_compliant_bep42_node_keeps_neutral_trust() { function better_public_identity_candidate_replaces_non_compliant_duplicate (line 843) | fn better_public_identity_candidate_replaces_non_compliant_duplicate() { function weaker_public_identity_candidate_does_not_replace_secure_duplicate (line 874) | fn weaker_public_identity_candidate_does_not_replace_secure_duplicate() { FILE: src/dht/scheduler.rs type DhtDemandState (line 9) | pub struct DhtDemandState { method is_awaiting_metadata (line 15) | pub(in crate::dht) fn is_awaiting_metadata(self) -> bool { method has_no_connected_peers (line 19) | pub(in crate::dht) fn has_no_connected_peers(self) -> bool { method scheduler_priority (line 23) | fn scheduler_priority(self) -> u8 { type DhtDemandMetrics (line 35) | pub struct DhtDemandMetrics { method activity_bps_or_bytes (line 55) | pub(in crate::dht) fn activity_bps_or_bytes(self) -> u64 { method wants_idle_speed_probe_for (line 62) | pub(in crate::dht) fn wants_idle_speed_probe_for(self, demand: DhtDema... method wants_extended_routine_search (line 72) | pub(in crate::dht) fn wants_extended_routine_search(self) -> bool { type DueDemandCandidate (line 94) | pub(super) struct DueDemandCandidate { type DemandEntrySnapshot (line 103) | pub(super) struct DemandEntrySnapshot { type DemandFinishMode (line 115) | pub(super) enum DemandFinishMode { method no_connected_peers_backoff_extra_steps (line 121) | fn no_connected_peers_backoff_extra_steps(self) -> u8 { type DemandEntry (line 130) | struct DemandEntry { type DemandScheduler (line 141) | pub(super) struct DemandScheduler { method new (line 150) | pub(super) fn new( method interval_for_demand (line 165) | fn interval_for_demand( method no_connected_peers_backoff_step_cap (line 185) | fn no_connected_peers_backoff_step_cap(&self) -> u8 { method capped_no_connected_peers_backoff_step (line 201) | fn capped_no_connected_peers_backoff_step(&self, step: u8) -> u8 { method apply_demand_update (line 205) | fn apply_demand_update(entry: &mut DemandEntry, demand: DhtDemandState... method register (line 224) | pub(super) fn register(&mut self, info_hash: InfoHash, demand: DhtDema... method unregister (line 247) | pub(super) fn unregister(&mut self, info_hash: InfoHash) -> bool { method update (line 261) | pub(super) fn update(&mut self, info_hash: InfoHash, demand: DhtDemand... method update_metrics (line 269) | pub(super) fn update_metrics(&mut self, info_hash: InfoHash, metrics: ... method demand_state (line 277) | pub(super) fn demand_state(&self, info_hash: InfoHash) -> Option Option Vec { method due_candidates (line 312) | pub(super) fn due_candidates(&self, now: Instant) -> Vec bool { method take_due (line 356) | pub(super) fn take_due(&mut self, now: Instant, limit: usize) -> Vec InfoHash { function demand (line 455) | fn demand(awaiting_metadata: bool, connected_peers: usize) -> DhtDemandS... type SchedulerOp (line 463) | enum SchedulerOp { function demand_strategy (line 496) | fn demand_strategy() -> impl Strategy { function scheduler_op_strategy (line 505) | fn scheduler_op_strategy() -> impl Strategy { function assert_scheduler_invariants (line 543) | fn assert_scheduler_invariants( function register_is_due_immediately (line 585) | fn register_is_due_immediately() { function more_urgent_update_during_active_lookup_requeues_immediately (line 600) | fn more_urgent_update_during_active_lookup_requeues_immediately() { function urgent_entries_are_prioritized (line 623) | fn urgent_entries_are_prioritized() { function less_urgent_update_does_not_force_immediate_rerun (line 646) | fn less_urgent_update_does_not_force_immediate_rerun() { function finish_uses_reason_specific_intervals (line 671) | fn finish_uses_reason_specific_intervals() { function no_connected_peers_backoff_grows_to_cap (line 704) | fn no_connected_peers_backoff_grows_to_cap() { function accelerated_no_connected_peers_backoff_skips_one_step (line 742) | fn accelerated_no_connected_peers_backoff_skips_one_step() { function no_connected_peers_backoff_step_stays_capped_at_max_interval (line 778) | fn no_connected_peers_backoff_step_stays_capped_at_max_interval() { FILE: src/dht/service.rs constant DHT_MAINTENANCE_INTERVAL (line 118) | const DHT_MAINTENANCE_INTERVAL: Duration = Duration::from_secs(60); constant DHT_REBIND_TRANSPORT_DRAIN_TIMEOUT (line 119) | const DHT_REBIND_TRANSPORT_DRAIN_TIMEOUT: Duration = Duration::from_secs... constant DHT_ROUTINE_LOOKUP_REFRESH_INTERVAL (line 120) | const DHT_ROUTINE_LOOKUP_REFRESH_INTERVAL: Duration = DHT_MAINTENANCE_IN... constant DHT_NO_CONNECTED_PEERS_BASE_INTERVAL (line 121) | const DHT_NO_CONNECTED_PEERS_BASE_INTERVAL: Duration = Duration::from_se... constant DHT_NO_CONNECTED_PEERS_MAX_INTERVAL (line 122) | const DHT_NO_CONNECTED_PEERS_MAX_INTERVAL: Duration = Duration::from_sec... constant DHT_AWAITING_METADATA_REFRESH_INTERVAL (line 123) | const DHT_AWAITING_METADATA_REFRESH_INTERVAL: Duration = Duration::from_... constant DHT_HEALTH_REFRESH_INTERVAL (line 124) | const DHT_HEALTH_REFRESH_INTERVAL: Duration = Duration::from_secs(30); constant DHT_DEMAND_SCHEDULER_INTERVAL (line 125) | const DHT_DEMAND_SCHEDULER_INTERVAL: Duration = Duration::from_millis(250); constant DHT_DEMAND_LOOKUP_SLOT_COUNT (line 126) | const DHT_DEMAND_LOOKUP_SLOT_COUNT: usize = 10; constant DHT_DEMAND_LOOKUP_SLOT_FILL_PER_TICK (line 127) | const DHT_DEMAND_LOOKUP_SLOT_FILL_PER_TICK: usize = 5; constant DHT_DRAIN_LOOKUPS_PER_VIRTUAL_SLOT (line 128) | const DHT_DRAIN_LOOKUPS_PER_VIRTUAL_SLOT: usize = 16; constant DHT_PLANNER_TOKEN_SCALE (line 129) | const DHT_PLANNER_TOKEN_SCALE: u64 = 1_000; constant DHT_AWAITING_METADATA_LAUNCHES_PER_MINUTE (line 130) | const DHT_AWAITING_METADATA_LAUNCHES_PER_MINUTE: u64 = 30; constant DHT_AWAITING_METADATA_LAUNCH_BURST (line 131) | const DHT_AWAITING_METADATA_LAUNCH_BURST: u64 = 8; constant DHT_NO_CONNECTED_PEERS_LAUNCHES_PER_MINUTE (line 132) | const DHT_NO_CONNECTED_PEERS_LAUNCHES_PER_MINUTE: u64 = 30; constant DHT_NO_CONNECTED_PEERS_LAUNCH_BURST (line 133) | const DHT_NO_CONNECTED_PEERS_LAUNCH_BURST: u64 = 10; constant DHT_ROUTINE_REFRESH_LAUNCHES_PER_MINUTE (line 134) | const DHT_ROUTINE_REFRESH_LAUNCHES_PER_MINUTE: u64 = 5; constant DHT_ROUTINE_REFRESH_LAUNCH_BURST (line 135) | const DHT_ROUTINE_REFRESH_LAUNCH_BURST: u64 = 5; constant DHT_DEMAND_FAIRNESS_AGE (line 136) | const DHT_DEMAND_FAIRNESS_AGE: Duration = Duration::from_secs(10 * 60); constant DHT_DEMAND_SPARE_RESEARCH_MAX_ACTIVE (line 137) | const DHT_DEMAND_SPARE_RESEARCH_MAX_ACTIVE: usize = 1; constant DHT_DEMAND_SPARE_RESEARCH_LAUNCH_LIMIT (line 138) | const DHT_DEMAND_SPARE_RESEARCH_LAUNCH_LIMIT: usize = 1; constant DHT_DEMAND_SPARE_RESEARCH_MIN_INTERVAL (line 139) | const DHT_DEMAND_SPARE_RESEARCH_MIN_INTERVAL: Duration = Duration::from_... constant DHT_DEMAND_USEFUL_YIELD_BOOST_MAX_AGE (line 140) | const DHT_DEMAND_USEFUL_YIELD_BOOST_MAX_AGE: Duration = Duration::from_s... constant DHT_DEMAND_STRONG_YIELD_BOOST_MAX_AGE (line 141) | const DHT_DEMAND_STRONG_YIELD_BOOST_MAX_AGE: Duration = Duration::from_s... constant DHT_DEMAND_STRONG_YIELD_BOOST_MIN_UNIQUE_PEERS (line 142) | const DHT_DEMAND_STRONG_YIELD_BOOST_MIN_UNIQUE_PEERS: usize = 64; constant DHT_DEMAND_POWER_BASE_SCALE_HALVES (line 143) | const DHT_DEMAND_POWER_BASE_SCALE_HALVES: u8 = 2; constant DHT_DEMAND_POWER_MAX_SCALE_HALVES (line 144) | const DHT_DEMAND_POWER_MAX_SCALE_HALVES: u8 = 8; constant DHT_PEER_PRESSURE_CAP_RAMP_UP_INTERVAL (line 145) | const DHT_PEER_PRESSURE_CAP_RAMP_UP_INTERVAL: Duration = Duration::from_... constant DHT_IDLE_SPEED_PROBE_2X_MIN_IDLE (line 146) | const DHT_IDLE_SPEED_PROBE_2X_MIN_IDLE: Duration = Duration::from_secs(30); constant DHT_IDLE_SPEED_PROBE_3X_MIN_IDLE (line 147) | const DHT_IDLE_SPEED_PROBE_3X_MIN_IDLE: Duration = Duration::from_secs(60); constant DHT_IDLE_SPEED_PROBE_4X_MIN_IDLE (line 148) | const DHT_IDLE_SPEED_PROBE_4X_MIN_IDLE: Duration = Duration::from_secs(1... constant DHT_IDLE_SPEED_PROBE_DECAY_INTERVAL (line 149) | const DHT_IDLE_SPEED_PROBE_DECAY_INTERVAL: Duration = Duration::from_sec... constant DHT_AWAITING_METADATA_SLOT_CAP (line 150) | const DHT_AWAITING_METADATA_SLOT_CAP: usize = DHT_DEMAND_LOOKUP_SLOT_COUNT; constant DHT_NO_CONNECTED_PEERS_SLOT_CAP (line 151) | const DHT_NO_CONNECTED_PEERS_SLOT_CAP: usize = 8; constant DHT_ROUTINE_LOOKUP_SLOT_CAP (line 152) | const DHT_ROUTINE_LOOKUP_SLOT_CAP: usize = 3; constant DHT_PERSISTENCE_MAX_AGE (line 153) | const DHT_PERSISTENCE_MAX_AGE: Duration = Duration::from_secs(24 * 60 * ... constant DHT_STARTUP_BOOTSTRAP_DELAY (line 154) | const DHT_STARTUP_BOOTSTRAP_DELAY: Duration = Duration::from_secs(5); constant DHT_IPV6_HEDGE_DELAY (line 155) | const DHT_IPV6_HEDGE_DELAY: Duration = Duration::from_millis(750); constant DHT_LOOKUP_BOOTSTRAP_WAIT (line 156) | const DHT_LOOKUP_BOOTSTRAP_WAIT: Duration = Duration::from_secs(2); constant DHT_UNIQUE_PEERS_FOUND_WINDOW (line 157) | const DHT_UNIQUE_PEERS_FOUND_WINDOW: Duration = Duration::from_secs(10); constant DHT_PARKED_CRAWL_MAX_AGE (line 158) | const DHT_PARKED_CRAWL_MAX_AGE: Duration = Duration::from_secs(5 * 60); constant DHT_DEMAND_DRAIN_MAX_AGE (line 159) | const DHT_DEMAND_DRAIN_MAX_AGE: Duration = Duration::from_secs(5); constant DHT_DEMAND_DRAIN_POLL_INTERVAL (line 160) | const DHT_DEMAND_DRAIN_POLL_INTERVAL: Duration = Duration::from_millis(2... constant DHT_DEMAND_DRAIN_MAX_INFLIGHT_QUERIES (line 161) | const DHT_DEMAND_DRAIN_MAX_INFLIGHT_QUERIES: usize = 128; constant DHT_DEMAND_DRAIN_NO_LATE_YIELD_GRACE (line 162) | const DHT_DEMAND_DRAIN_NO_LATE_YIELD_GRACE: Duration = Duration::from_mi... constant DHT_AWAITING_METADATA_DRAIN_NO_LATE_YIELD_GRACE (line 163) | const DHT_AWAITING_METADATA_DRAIN_NO_LATE_YIELD_GRACE: Duration = Durati... constant DHT_ROUTINE_DRAIN_NO_LATE_YIELD_GRACE (line 164) | const DHT_ROUTINE_DRAIN_NO_LATE_YIELD_GRACE: Duration = Duration::from_m... constant DHT_AWAITING_METADATA_SLICE_WALL_TIME (line 165) | const DHT_AWAITING_METADATA_SLICE_WALL_TIME: Duration = Duration::from_s... constant DHT_AWAITING_METADATA_SLICE_IDLE_TIMEOUT (line 166) | const DHT_AWAITING_METADATA_SLICE_IDLE_TIMEOUT: Duration = Duration::fro... constant DHT_NO_CONNECTED_PEERS_SLICE_WALL_TIME (line 167) | const DHT_NO_CONNECTED_PEERS_SLICE_WALL_TIME: Duration = Duration::from_... constant DHT_NO_CONNECTED_PEERS_SLICE_IDLE_TIMEOUT (line 168) | const DHT_NO_CONNECTED_PEERS_SLICE_IDLE_TIMEOUT: Duration = Duration::fr... constant DHT_ROUTINE_SLICE_WALL_TIME (line 169) | const DHT_ROUTINE_SLICE_WALL_TIME: Duration = Duration::from_secs(2); constant DHT_ROUTINE_SLICE_IDLE_TIMEOUT (line 170) | const DHT_ROUTINE_SLICE_IDLE_TIMEOUT: Duration = Duration::from_millis(7... constant DHT_ROUTINE_SUPPORT_SLICE_WALL_TIME (line 171) | const DHT_ROUTINE_SUPPORT_SLICE_WALL_TIME: Duration = Duration::from_sec... constant DHT_ROUTINE_SUPPORT_SLICE_IDLE_TIMEOUT (line 172) | const DHT_ROUTINE_SUPPORT_SLICE_IDLE_TIMEOUT: Duration = Duration::from_... constant DHT_AWAITING_METADATA_SLICE_UNIQUE_PEER_CAP (line 173) | const DHT_AWAITING_METADATA_SLICE_UNIQUE_PEER_CAP: usize = 128; constant DHT_NO_CONNECTED_PEERS_SLICE_UNIQUE_PEER_CAP (line 174) | const DHT_NO_CONNECTED_PEERS_SLICE_UNIQUE_PEER_CAP: usize = 48; constant DHT_ROUTINE_SLICE_UNIQUE_PEER_CAP (line 175) | const DHT_ROUTINE_SLICE_UNIQUE_PEER_CAP: usize = 16; constant DHT_ROUTINE_SUPPORT_SLICE_UNIQUE_PEER_CAP (line 176) | const DHT_ROUTINE_SUPPORT_SLICE_UNIQUE_PEER_CAP: usize = 48; constant DHT_AWAITING_METADATA_STALLED_EMPTY_SLICE_RESET_THRESHOLD (line 177) | const DHT_AWAITING_METADATA_STALLED_EMPTY_SLICE_RESET_THRESHOLD: u32 = 4; constant DHT_NO_CONNECTED_PEERS_STALLED_EMPTY_SLICE_RESET_THRESHOLD (line 178) | const DHT_NO_CONNECTED_PEERS_STALLED_EMPTY_SLICE_RESET_THRESHOLD: u32 = 3; constant DHT_ROUTINE_STALLED_EMPTY_SLICE_RESET_THRESHOLD (line 179) | const DHT_ROUTINE_STALLED_EMPTY_SLICE_RESET_THRESHOLD: u32 = 2; constant DHT_AWAITING_METADATA_STALLED_LOW_YIELD_SLICE_MAX_UNIQUE_PEERS (line 180) | const DHT_AWAITING_METADATA_STALLED_LOW_YIELD_SLICE_MAX_UNIQUE_PEERS: us... constant DHT_NO_CONNECTED_PEERS_STALLED_LOW_YIELD_SLICE_MAX_UNIQUE_PEERS (line 181) | const DHT_NO_CONNECTED_PEERS_STALLED_LOW_YIELD_SLICE_MAX_UNIQUE_PEERS: u... constant DHT_ROUTINE_STALLED_LOW_YIELD_SLICE_MAX_UNIQUE_PEERS (line 182) | const DHT_ROUTINE_STALLED_LOW_YIELD_SLICE_MAX_UNIQUE_PEERS: usize = 1; constant DHT_NO_CONNECTED_PEERS_WEAK_PARKED_MIN_VISITED (line 183) | const DHT_NO_CONNECTED_PEERS_WEAK_PARKED_MIN_VISITED: usize = 12; constant DHT_NO_CONNECTED_PEERS_WEAK_PARKED_MAX_RESPONDERS (line 184) | const DHT_NO_CONNECTED_PEERS_WEAK_PARKED_MAX_RESPONDERS: usize = 3; constant DHT_NO_CONNECTED_PEERS_WEAK_PARKED_MAX_FRONTIER (line 185) | const DHT_NO_CONNECTED_PEERS_WEAK_PARKED_MAX_FRONTIER: usize = 8; constant DHT_NO_CONNECTED_PEERS_WEAK_PARKED_MAX_RECEIVED_PEERS (line 186) | const DHT_NO_CONNECTED_PEERS_WEAK_PARKED_MAX_RECEIVED_PEERS: usize = 12; constant DHT_ROUTINE_WEAK_PARKED_MIN_VISITED (line 187) | const DHT_ROUTINE_WEAK_PARKED_MIN_VISITED: usize = 8; constant DHT_ROUTINE_WEAK_PARKED_MAX_RESPONDERS (line 188) | const DHT_ROUTINE_WEAK_PARKED_MAX_RESPONDERS: usize = 1; constant DHT_ROUTINE_WEAK_PARKED_MAX_FRONTIER (line 189) | const DHT_ROUTINE_WEAK_PARKED_MAX_FRONTIER: usize = 4; constant DHT_ROUTINE_WEAK_PARKED_MAX_RECEIVED_PEERS (line 190) | const DHT_ROUTINE_WEAK_PARKED_MAX_RECEIVED_PEERS: usize = 4; FILE: src/dht/service/api.rs type DhtLookupRun (line 8) | pub struct DhtLookupRun { type DhtCommandSender (line 19) | pub(in crate::dht::service) type DhtCommandSender = mpsc::UnboundedSende... type DhtCommandReceiver (line 20) | pub(in crate::dht::service) type DhtCommandReceiver = mpsc::UnboundedRec... function send_dht_command (line 22) | pub(in crate::dht::service) fn send_dht_command( type DhtDemandSubscriptionInner (line 30) | pub(in crate::dht::service) enum DhtDemandSubscriptionInner { type DhtDemandSubscription (line 42) | pub struct DhtDemandSubscription { method empty (line 48) | fn empty() -> Self { method recv (line 56) | pub async fn recv(&mut self) -> Option> { method drop (line 62) | fn drop(&mut self) { type RecordedAnnounces (line 81) | type RecordedAnnounces = Arc, Option)>>>; type RecordedReconfigures (line 83) | type RecordedReconfigures = Arc>>; type RecordedPeerSlotUsages (line 85) | type RecordedPeerSlotUsages = Arc>>; type TestDhtRecorder (line 89) | pub(crate) struct TestDhtRecorder { method recorded_announces (line 97) | pub(crate) fn recorded_announces(&self) -> Vec<(Vec, Option)> { method recorded_reconfigures (line 104) | pub(crate) fn recorded_reconfigures(&self) -> Vec { method recorded_peer_slot_usages (line 111) | pub(crate) fn recorded_peer_slot_usages(&self) -> Vec<(usize, usize)> { type DhtCommand (line 120) | pub(in crate::dht::service) enum DhtCommand { type DhtService (line 190) | pub struct DhtService { method new (line 200) | pub async fn new( method handle (line 258) | pub fn handle(&self) -> DhtHandle { method subscribe_status (line 262) | pub fn subscribe_status(&self) -> watch::Receiver { method current_status (line 266) | pub fn current_status(&self) -> DhtStatus { method current_wave_telemetry (line 270) | pub fn current_wave_telemetry(&self) -> DhtWaveTelemetry { method current_warning (line 274) | pub fn current_warning(&self) -> Option { method reconfigure (line 278) | pub fn reconfigure(&self, config: DhtServiceConfig) { method update_peer_slot_usage (line 282) | pub fn update_peer_slot_usage(&self, total_peers: usize, max_connected... method from_test_recorder (line 314) | pub(crate) fn from_test_recorder(recorder: TestDhtRecorder) -> Self { function configured_or_persisted_local_node_id (line 293) | fn configured_or_persisted_local_node_id() -> NodeId { function configured_status_from_settings (line 357) | pub fn configured_status_from_settings(settings: &Settings) -> DhtStatus { function configured_status_from_config (line 361) | fn configured_status_from_config(config: &DhtServiceConfig) -> DhtStatus { type DhtHandle (line 379) | pub struct DhtHandle { method fmt (line 400) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { method disabled (line 416) | pub fn disabled() -> Self { method from_test_recorder (line 433) | fn from_test_recorder(recorder: TestDhtRecorder) -> Self { method status_snapshot (line 452) | pub async fn status_snapshot(&self) -> DhtStatus { method spawn_lookup_task (line 461) | pub fn spawn_lookup_task( method lookup_once (line 522) | pub async fn lookup_once( method announce_peer (line 543) | pub async fn announce_peer(&self, info_hash: Vec, port: Option, demand: DhtDemandState... method update_demand_metrics (line 639) | pub fn update_demand_metrics(&self, info_hash: Vec, metrics: DhtDe... method start_lookup_receiver (line 659) | async fn start_lookup_receiver(&self, info_hash: InfoHash) -> Option &watch::Receiver { type DhtHandleInner (line 384) | enum DhtHandleInner { method default (line 410) | fn default() -> Self { FILE: src/dht/service/api_tests.rs function dht_service_new_falls_back_to_disabled_when_initial_runtime_build_fails (line 5) | async fn dht_service_new_falls_back_to_disabled_when_initial_runtime_bui... function managed_lookup_receiver_drop_sends_cancel_for_non_empty_lookup_ids (line 35) | async fn managed_lookup_receiver_drop_sends_cancel_for_non_empty_lookup_... function managed_lookup_receiver_drop_ignores_empty_lookup_ids (line 58) | async fn managed_lookup_receiver_drop_ignores_empty_lookup_ids() { function dht_demand_subscription_drop_sends_unregister_for_service_subscription (line 75) | async fn dht_demand_subscription_drop_sends_unregister_for_service_subsc... function summarize_lookup_receiver_counts_unique_peer_families (line 104) | async fn summarize_lookup_receiver_counts_unique_peer_families() { FILE: src/dht/service/command_tests.rs function dht_runtime_command_model_reduces_runtime_commands_only (line 5) | fn dht_runtime_command_model_reduces_runtime_commands_only() { function dht_runtime_command_model_routes_start_get_peers_and_announce (line 40) | fn dht_runtime_command_model_routes_start_get_peers_and_announce() { function dht_runtime_command_model_routes_family_attach_and_cancel (line 79) | fn dht_runtime_command_model_routes_family_attach_and_cancel() { function dht_runtime_command_model_routes_planner_work_with_start_due_followup (line 135) | fn dht_runtime_command_model_routes_planner_work_with_start_due_followup... FILE: src/dht/service/commands.rs type DhtRuntimeLookupFamilyRequest (line 16) | pub(super) struct DhtRuntimeLookupFamilyRequest { type DhtRuntimeCommandAction (line 27) | pub(super) enum DhtRuntimeCommandAction { method kind (line 90) | fn kind(&self) -> &'static str { type DhtRuntimeCommandEffect (line 54) | pub(super) enum DhtRuntimeCommandEffect { method kind (line 105) | fn kind(&self) -> &'static str { type DhtRuntimeCommandReduction (line 83) | pub(super) struct DhtRuntimeCommandReduction { type DhtRuntimeCommandModel (line 87) | pub(super) struct DhtRuntimeCommandModel; method update_command (line 121) | pub(super) fn update_command(command: DhtCommand) -> Option DhtRuntimeCom... FILE: src/dht/service/config.rs type DhtBackendKind (line 9) | pub enum DhtBackendKind { method from_override (line 42) | fn from_override(value: &str) -> Option { type DhtServiceConfig (line 17) | pub struct DhtServiceConfig { method from_settings (line 26) | pub fn from_settings(settings: &Settings) -> Self { function forced_internal_backend_error (line 52) | pub(in crate::dht::service) fn forced_internal_backend_error( FILE: src/dht/service/driver.rs type LoopEvent (line 19) | pub(in crate::dht::service) enum LoopEvent { function command_event (line 30) | pub(in crate::dht::service) fn command_event(maybe_command: Option &'static str { type DhtLifecycleEffect (line 34) | pub(super) enum DhtLifecycleEffect { method kind (line 71) | fn kind(&self) -> &'static str { type DhtLifecycleReduction (line 49) | pub(super) struct DhtLifecycleReduction { type DhtLifecycleModel (line 53) | pub(super) struct DhtLifecycleModel; method update (line 86) | pub(super) fn update(action: DhtLifecycleAction) -> DhtLifecycleReduct... FILE: src/dht/service/lifecycle_tests.rs function dht_lifecycle_model_startup_bootstrap_runs_only_when_due_and_idle (line 5) | fn dht_lifecycle_model_startup_bootstrap_runs_only_when_due_and_idle() { function dht_lifecycle_model_startup_bootstrap_result_updates_retry_state (line 34) | fn dht_lifecycle_model_startup_bootstrap_result_updates_retry_state() { function dht_lifecycle_model_maintenance_only_runs_when_runtime_idle (line 59) | fn dht_lifecycle_model_maintenance_only_runs_when_runtime_idle() { function dht_lifecycle_model_health_tick_publishes_expires_and_saves (line 76) | fn dht_lifecycle_model_health_tick_publishes_expires_and_saves() { function dht_lifecycle_model_runtime_failures_publish_warning_status (line 89) | fn dht_lifecycle_model_runtime_failures_publish_warning_status() { function dht_lifecycle_model_shutdown_saves_runtime_state (line 113) | fn dht_lifecycle_model_shutdown_saves_runtime_state() { FILE: src/dht/service/monitor.rs type DhtActionEffectSnapshot (line 7) | pub(in crate::dht::service) struct DhtActionEffectSnapshot { function action_effect_snapshot (line 14) | pub(in crate::dht::service) fn action_effect_snapshot( function observe_action_effect_reduction (line 27) | pub(in crate::dht::service) fn observe_action_effect_reduction( FILE: src/dht/service/monitor_tests.rs function action_effect_snapshot_records_reduction_shape (line 4) | fn action_effect_snapshot_records_reduction_shape() { FILE: src/dht/service/planner.rs type DemandPlannerActionView (line 43) | pub(super) struct DemandPlannerActionView { method from_action (line 77) | pub(super) fn from_action(action: &DemandPlannerAction<'_>) -> Self { method with_demand (line 212) | fn with_demand(mut self, demand: DhtDemandState) -> Self { method with_metrics (line 219) | fn with_metrics(mut self, metrics: DhtDemandMetrics) -> Self { type DemandPlannerEffectView (line 243) | pub(super) struct DemandPlannerEffectView { method from_effect (line 290) | pub(super) fn from_effect(effect: &DemandPlannerEffect) -> Self { method with_demand (line 376) | fn with_demand(mut self, demand: DhtDemandState) -> Self { method with_metrics (line 383) | fn with_metrics(mut self, metrics: DhtDemandMetrics, demand: Option bool { function demand_planner_monitor_enabled (line 412) | pub(super) fn demand_planner_monitor_enabled() -> bool { function dht_invariant_checks_enabled (line 416) | pub(super) fn dht_invariant_checks_enabled() -> bool { function short_info_hash (line 420) | pub(super) fn short_info_hash(info_hash: InfoHash) -> String { function optional_info_hash_label (line 424) | pub(super) fn optional_info_hash_label(info_hash: Option) -> S... function trace_demand_planner_reduction (line 428) | pub(super) fn trace_demand_planner_reduction( function trace_demand_planner_effect (line 519) | pub(super) fn trace_demand_planner_effect(stage: &'static str, effect: &... method update (line 577) | pub(super) fn update(&mut self, action: DemandPlannerAction<'_>) -> Dema... FILE: src/dht/service/planner/drain.rs function take_parked_family_state (line 7) | pub(in crate::dht::service) fn take_parked_family_state( function store_parked_lookup_states (line 37) | pub(in crate::dht::service) fn store_parked_lookup_states( function parked_slice_outcome_for_quality (line 65) | pub(in crate::dht::service) fn parked_slice_outcome_for_quality( function aggregate_lookup_quality (line 76) | pub(in crate::dht::service) fn aggregate_lookup_quality( function park_lookup_ids (line 86) | pub(in crate::dht::service) fn park_lookup_ids( function schedule_drained_demand_finalize (line 125) | pub(in crate::dht::service) fn schedule_drained_demand_finalize( function demand_drain_duration (line 140) | pub(in crate::dht::service) fn demand_drain_duration( function demand_drain_no_late_yield_grace (line 198) | pub(in crate::dht::service) fn demand_drain_no_late_yield_grace( function demand_drain_score (line 208) | pub(in crate::dht::service) fn demand_drain_score( function draining_demand_inflight (line 240) | pub(in crate::dht::service) fn draining_demand_inflight( function demand_drain_admission_snapshot (line 252) | pub(in crate::dht::service) fn demand_drain_admission_snapshot( function cancel_lookup_ids_to_parked (line 262) | pub(in crate::dht::service) fn cancel_lookup_ids_to_parked( function drain_lookup_ids (line 292) | pub(in crate::dht::service) fn drain_lookup_ids( function drained_demand_lookup_runtime_ready (line 407) | pub(in crate::dht::service) fn drained_demand_lookup_runtime_ready( function record_drain_peers_received (line 414) | pub(in crate::dht::service) fn record_drain_peers_received( method drain_runtime_readiness (line 437) | pub(in crate::dht::service) fn drain_runtime_readiness( method take_parked_family_state (line 452) | pub(in crate::dht::service) fn take_parked_family_state( method park_lookup_ids (line 468) | pub(in crate::dht::service) fn park_lookup_ids( method drain_lookup_ids (line 489) | pub(in crate::dht::service) fn drain_lookup_ids( method drain_admission_snapshot (line 514) | pub(in crate::dht::service) fn drain_admission_snapshot( method finalize_drained_lookup (line 523) | pub(in crate::dht::service) fn finalize_drained_lookup( function drained_demand_lookup_ready_for_finalize (line 541) | pub(in crate::dht::service) fn drained_demand_lookup_ready_for_finalize( function finalize_drained_demand_lookup (line 553) | pub(in crate::dht::service) fn finalize_drained_demand_lookup( function evict_stale_parked_crawls (line 605) | pub(in crate::dht::service) fn evict_stale_parked_crawls( FILE: src/dht/service/planner/drain_tests.rs function demand_crawl_state_reuses_across_class_change_and_resets_on_staleness_or_low_quality (line 6) | fn demand_crawl_state_reuses_across_class_change_and_resets_on_staleness... function awaiting_metadata_parked_crawl_resets_after_repeated_zero_yield (line 151) | fn awaiting_metadata_parked_crawl_resets_after_repeated_zero_yield() { function parked_quality_thresholds_match_class_expectations (line 183) | fn parked_quality_thresholds_match_class_expectations() { function parked_slice_outcome_separates_healthy_zero_from_weak_low_yield (line 212) | fn parked_slice_outcome_separates_healthy_zero_from_weak_low_yield() { function draining_demand_records_late_unique_peers_without_double_counting (line 255) | fn draining_demand_records_late_unique_peers_without_double_counting() { function drain_finalize_readiness_bounds_waiting_drains (line 289) | fn drain_finalize_readiness_bounds_waiting_drains() { function drain_policy_prefers_productive_slices_and_rejects_idle_no_peer_work (line 337) | fn drain_policy_prefers_productive_slices_and_rejects_idle_no_peer_work() { function demand_slice_metrics_record_starts_stops_and_resets (line 384) | fn demand_slice_metrics_record_starts_stops_and_resets() { function demand_planner_drained_lookup_lifecycle_keeps_late_peer_yield_in_state (line 464) | fn demand_planner_drained_lookup_lifecycle_keeps_late_peer_yield_in_stat... function parked_family_state_round_trips_each_family_and_clears_entry (line 596) | fn parked_family_state_round_trips_each_family_and_clears_entry() { function parked_family_state_reset_drops_low_quality_crawl_and_records_reason (line 639) | fn parked_family_state_reset_drops_low_quality_crawl_and_records_reason() { function demand_planner_drain_runtime_readiness_defaults_ready_without_runtime (line 668) | fn demand_planner_drain_runtime_readiness_defaults_ready_without_runtime... function drain_virtual_slots_reduce_launch_budget_fractionally (line 688) | fn drain_virtual_slots_reduce_launch_budget_fractionally() { function demand_planner_peers_received_action_records_drain_unique_peers (line 719) | fn demand_planner_peers_received_action_records_drain_unique_peers() { function demand_planner_drain_tick_action_requests_finalize_for_ready_drains (line 761) | fn demand_planner_drain_tick_action_requests_finalize_for_ready_drains() { function demand_planner_lookup_park_rejection_finishes_scheduler_entry (line 793) | fn demand_planner_lookup_park_rejection_finishes_scheduler_entry() { function demand_planner_lookup_park_admission_keeps_scheduler_entry_in_progress (line 864) | fn demand_planner_lookup_park_admission_keeps_scheduler_entry_in_progres... function demand_planner_lookup_park_admission_requests_finalize_after_class_change (line 931) | fn demand_planner_lookup_park_admission_requests_finalize_after_class_ch... function demand_planner_drain_finalized_action_finishes_and_applies_backoff_mode (line 990) | fn demand_planner_drain_finalized_action_finishes_and_applies_backoff_mo... FILE: src/dht/service/planner/invariant_tests.rs function demand_planner_invariants_accept_normal_active_and_draining_state (line 6) | fn demand_planner_invariants_accept_normal_active_and_draining_state() { function demand_planner_invariants_accept_pending_lookup_start_state (line 48) | fn demand_planner_invariants_accept_pending_lookup_start_state() { function demand_planner_invariants_accept_pending_lookup_park_state (line 69) | fn demand_planner_invariants_accept_pending_lookup_park_state() { function demand_planner_invariants_accept_pending_park_after_demand_class_changes (line 90) | fn demand_planner_invariants_accept_pending_park_after_demand_class_chan... function demand_planner_invariants_reject_active_without_scheduler_entry (line 119) | fn demand_planner_invariants_reject_active_without_scheduler_entry() { function demand_planner_invariants_reject_duplicate_lookup_id (line 136) | fn demand_planner_invariants_reject_duplicate_lookup_id() { function demand_planner_invariants_reject_scheduler_in_progress_without_lookup_state (line 165) | fn demand_planner_invariants_reject_scheduler_in_progress_without_lookup... FILE: src/dht/service/planner/invariants.rs type DemandPlannerInvariantViolation (line 7) | pub(in crate::dht::service) struct DemandPlannerInvariantViolation { method new (line 14) | fn new(kind: &'static str, info_hash: Option, detail: impl I... method info_hash_label (line 22) | fn info_hash_label(&self) -> String { function check_demand_planner_invariants (line 27) | pub(in crate::dht::service) fn check_demand_planner_invariants( function observe_demand_planner_invariants (line 320) | pub(in crate::dht::service) fn observe_demand_planner_invariants( FILE: src/dht/service/planner/reducer_tests.rs function demand_planner_plan_due_starts_due_demands_by_class_and_marks_state (line 7) | fn demand_planner_plan_due_starts_due_demands_by_class_and_marks_state() { function demand_planner_updates_demand_metrics_without_starting_work (line 92) | fn demand_planner_updates_demand_metrics_without_starting_work() { function demand_planner_uses_metrics_when_building_routine_lookup_plan (line 129) | fn demand_planner_uses_metrics_when_building_routine_lookup_plan() { function demand_planner_plan_due_skips_draining_demands_but_launches_independent_work (line 180) | fn demand_planner_plan_due_skips_draining_demands_but_launches_independe... function demand_planner_lookup_start_failed_releases_scheduler_entry_and_refunds_slot (line 239) | fn demand_planner_lookup_start_failed_releases_scheduler_entry_and_refun... function demand_planner_duplicate_subscribers_keep_lookup_until_final_unsubscribe (line 293) | fn demand_planner_duplicate_subscribers_keep_lookup_until_final_unsubscr... function demand_planner_runtime_reset_action_clears_runtime_state_and_preserves_demands (line 348) | fn demand_planner_runtime_reset_action_clears_runtime_state_and_preserve... function demand_planner_lookup_finished_action_updates_state_and_emits_metrics_effect (line 396) | fn demand_planner_lookup_finished_action_updates_state_and_emits_metrics... function demand_planner_update_action_requests_drain_finalize_on_class_mismatch (line 446) | fn demand_planner_update_action_requests_drain_finalize_on_class_mismatc... function demand_planner_duplicate_register_requests_drain_finalize_on_class_mismatch (line 493) | fn demand_planner_duplicate_register_requests_drain_finalize_on_class_mi... function demand_planner_subscriber_removed_action_detaches_lookup_work_on_final_subscriber (line 555) | fn demand_planner_subscriber_removed_action_detaches_lookup_work_on_fina... FILE: src/dht/service/planner/replay_tests.rs type PlannerReplay (line 6) | struct PlannerReplay { method new (line 15) | fn new() -> Self { method advance (line 26) | fn advance(&mut self, duration: Duration) { method register (line 30) | fn register(&mut self, label: &str, key: u32, demand: DhtDemandState) { method update (line 41) | fn update(&mut self, label: &str, key: u32, demand: DhtDemandState) { method update_metrics (line 52) | fn update_metrics(&mut self, label: &str, key: u32, metrics: DhtDemand... method plan (line 62) | fn plan(&mut self, label: &str, runtime_available: bool) { method finish (line 87) | fn finish(&mut self, label: &str, key: u32, total_peers: usize, unique... method park_active (line 107) | fn park_active( method add_drain_peers (line 172) | fn add_drain_peers(&mut self, label: &str, key: u32, peer_count: u8) { method drain_tick (line 185) | fn drain_tick(&mut self, label: &str, runtime_ready: bool) { method finalize_drained (line 208) | fn finalize_drained(&mut self, label: &str, info_hash: InfoHash) { method runtime_reset (line 240) | fn runtime_reset(&mut self, label: &str) { method reduce (line 244) | fn reduce(&mut self, label: &str, action: DemandPlannerAction<'_>) -> ... method rendered (line 257) | fn rendered(&self) -> String { function effect_labels (line 267) | fn effect_labels(effects: &[DemandPlannerEffect]) -> Vec { function effect_label (line 271) | fn effect_label(effect: &DemandPlannerEffect) -> String { function plan_label (line 341) | fn plan_label(plan: Option) -> String { function state_label (line 359) | fn state_label(base: Instant, planner: &DemandPlannerModel) -> String { function entry_labels (line 370) | fn entry_labels(base: Instant, planner: &DemandPlannerModel) -> Vec Vec { function pending_labels (line 409) | fn pending_labels(planner: &DemandPlannerModel) -> Vec { function drain_labels (line 427) | fn drain_labels(base: Instant, planner: &DemandPlannerModel) -> Vec Vec) -> String { function instant_ms (line 472) | fn instant_ms(base: Instant, instant: Instant) -> u64 { function hash_label (line 476) | fn hash_label(info_hash: InfoHash) -> String { function metadata_demand (line 480) | fn metadata_demand() -> DhtDemandState { function no_peer_demand (line 487) | fn no_peer_demand() -> DhtDemandState { function routine_demand (line 494) | fn routine_demand(connected_peers: usize) -> DhtDemandState { function active_complete_upload_metrics (line 501) | fn active_complete_upload_metrics(connected_peers: usize) -> DhtDemandMe... function idle_probe_metrics (line 515) | fn idle_probe_metrics() -> DhtDemandMetrics { function demand_from_trace_class (line 525) | fn demand_from_trace_class(class: &str, connected_peers: usize) -> DhtDe... function stop_reason_from_trace (line 534) | fn stop_reason_from_trace(token: &str) -> DemandSliceStopReason { function metrics_from_trace (line 544) | fn metrics_from_trace(token: &str, connected_peers: usize) -> DhtDemandM... function replay_normalized_trace_fixture (line 561) | fn replay_normalized_trace_fixture(script: &str) -> String { function demand_planner_replays_normalized_trace_fixture (line 633) | fn demand_planner_replays_normalized_trace_fixture() { function demand_planner_replays_fixed_trace_with_stable_effects_and_state (line 661) | fn demand_planner_replays_fixed_trace_with_stable_effects_and_state() { function demand_planner_replays_idle_speed_probe_boost_without_wall_clock_or_network (line 709) | fn demand_planner_replays_idle_speed_probe_boost_without_wall_clock_or_n... FILE: src/dht/service/planner/selection.rs function active_demand_lookup_slot_count (line 7) | pub(in crate::dht::service) fn active_demand_lookup_slot_count( function active_demand_lookup_slot_counts (line 13) | pub(in crate::dht::service) fn active_demand_lookup_slot_counts( function draining_demand_slot_counts (line 23) | pub(in crate::dht::service) fn draining_demand_slot_counts( function drain_virtual_slot_count (line 33) | pub(in crate::dht::service) fn drain_virtual_slot_count(draining_lookup_... function demand_lookup_launch_budget (line 42) | pub(in crate::dht::service) fn demand_lookup_launch_budget( function demand_lookup_class_slot_cap (line 52) | pub(in crate::dht::service) fn demand_lookup_class_slot_cap(class: Deman... function due_candidate_has_reusable_parked_crawl (line 60) | pub(in crate::dht::service) fn due_candidate_has_reusable_parked_crawl( function candidate_last_useful_yield_age (line 71) | pub(in crate::dht::service) fn candidate_last_useful_yield_age( function candidate_last_unique_peers (line 82) | pub(in crate::dht::service) fn candidate_last_unique_peers( function candidate_due_age (line 92) | pub(in crate::dht::service) fn candidate_due_age( function candidate_has_fairness_age (line 99) | pub(in crate::dht::service) fn candidate_has_fairness_age( function candidate_has_useful_yield_history (line 106) | pub(in crate::dht::service) fn candidate_has_useful_yield_history( function candidate_wants_swarm_support (line 115) | pub(in crate::dht::service) fn candidate_wants_swarm_support( function candidate_selection_reason (line 122) | pub(in crate::dht::service) fn candidate_selection_reason( function demand_candidate_priority_score (line 141) | pub(in crate::dht::service) fn demand_candidate_priority_score( function candidate_last_activity_age (line 169) | pub(in crate::dht::service) fn candidate_last_activity_age( function spare_research_candidate_ready (line 182) | pub(in crate::dht::service) fn spare_research_candidate_ready( function demand_planner_selection_stats (line 192) | pub(in crate::dht::service) fn demand_planner_selection_stats( function select_spare_research_launches (line 220) | pub(in crate::dht::service) fn select_spare_research_launches( function select_idle_speed_probe_launches (line 290) | pub(in crate::dht::service) fn select_idle_speed_probe_launches( function select_due_demand_launches (line 370) | pub(in crate::dht::service) fn select_due_demand_launches( function select_due_demand_launches_with_stats (line 391) | pub(in crate::dht::service) fn select_due_demand_launches_with_stats( FILE: src/dht/service/planner/selection_tests.rs function demand_lookup_plan_varies_by_demand_class (line 7) | fn demand_lookup_plan_varies_by_demand_class() { function routine_lookup_plan_expands_when_metrics_need_swarm_support (line 38) | fn routine_lookup_plan_expands_when_metrics_need_swarm_support() { function demand_lookup_plan_boosts_metadata_and_swarm_support_without_global_cap_change (line 82) | fn demand_lookup_plan_boosts_metadata_and_swarm_support_without_global_c... function demand_lookup_plan_boosts_only_productive_no_peer_candidates (line 142) | fn demand_lookup_plan_boosts_only_productive_no_peer_candidates() { function demand_lookup_plan_uses_idle_speed_probe_multiplier_for_unserved_demand (line 217) | fn demand_lookup_plan_uses_idle_speed_probe_multiplier_for_unserved_dema... function demand_lookup_plan_caps_any_tier_to_half_power_under_peer_pressure (line 254) | fn demand_lookup_plan_caps_any_tier_to_half_power_under_peer_pressure() { function peer_pressure_cap_drops_fast_and_recovers_linearly (line 300) | fn peer_pressure_cap_drops_fast_and_recovers_linearly() { function idle_speed_probe_escalates_after_global_idle_with_demand (line 319) | fn idle_speed_probe_escalates_after_global_idle_with_demand() { function idle_speed_probe_decays_after_activity_recovers (line 372) | fn idle_speed_probe_decays_after_activity_recovers() { function idle_speed_probe_holds_decay_level_when_idle_resumes (line 444) | fn idle_speed_probe_holds_decay_level_when_idle_resumes() { function idle_speed_probe_selects_not_yet_due_demand (line 506) | fn idle_speed_probe_selects_not_yet_due_demand() { function demand_planner_uses_spare_capacity_for_backed_off_no_peer_state (line 542) | fn demand_planner_uses_spare_capacity_for_backed_off_no_peer_state() { function demand_lookup_launch_budget_respects_active_slot_cap (line 609) | fn demand_lookup_launch_budget_respects_active_slot_cap() { function select_due_demand_launches_respects_class_slot_caps (line 645) | fn select_due_demand_launches_respects_class_slot_caps() { function candidate_priority_score_keeps_metadata_above_swarm_support (line 711) | fn candidate_priority_score_keeps_metadata_above_swarm_support() { function candidate_priority_score_keeps_metadata_above_max_supported_yield (line 748) | fn candidate_priority_score_keeps_metadata_above_max_supported_yield() { function candidate_priority_score_does_not_inflate_cold_no_peer_recovery (line 797) | fn candidate_priority_score_does_not_inflate_cold_no_peer_recovery() { function select_due_demand_launches_prefers_swarm_support_over_cold_no_peer_recovery (line 827) | fn select_due_demand_launches_prefers_swarm_support_over_cold_no_peer_re... function select_due_demand_launches_allows_high_yield_routine_to_beat_cold_no_peer (line 878) | fn select_due_demand_launches_allows_high_yield_routine_to_beat_cold_no_... function select_due_demand_launches_does_not_bypass_routine_cap_for_high_yield (line 930) | fn select_due_demand_launches_does_not_bypass_routine_cap_for_high_yield... function select_due_demand_launches_prefers_reusable_parked_crawls_within_class (line 986) | fn select_due_demand_launches_prefers_reusable_parked_crawls_within_clas... function select_due_demand_launches_does_not_reuse_low_quality_parked_crawl (line 1053) | fn select_due_demand_launches_does_not_reuse_low_quality_parked_crawl() { function select_due_demand_launches_prefers_recently_productive_crawls_within_class (line 1122) | fn select_due_demand_launches_prefers_recently_productive_crawls_within_... function select_due_demand_launches_prefers_stale_productive_crawls_within_class (line 1174) | fn select_due_demand_launches_prefers_stale_productive_crawls_within_cla... function select_due_demand_launches_fairness_age_overtakes_yield_history (line 1226) | fn select_due_demand_launches_fairness_age_overtakes_yield_history() { function select_due_demand_launches_does_not_bypass_class_cap_for_oldest_due_candidate (line 1278) | fn select_due_demand_launches_does_not_bypass_class_cap_for_oldest_due_c... function demand_planner_budget_caps_repeated_no_peer_launch_batches (line 1322) | fn demand_planner_budget_caps_repeated_no_peer_launch_batches() { function demand_planner_selection_stats_report_throttled_due_candidates (line 1376) | fn demand_planner_selection_stats_report_throttled_due_candidates() { function demand_planner_budget_refills_no_peer_tokens_over_time (line 1421) | fn demand_planner_budget_refills_no_peer_tokens_over_time() { function exhausted_no_peer_budget_does_not_block_metadata_launches (line 1435) | fn exhausted_no_peer_budget_does_not_block_metadata_launches() { function no_peer_launch_budget_is_independent_of_catalog_size (line 1479) | fn no_peer_launch_budget_is_independent_of_catalog_size() { function select_spare_research_launches_uses_idle_capacity_for_backed_off_no_peer_work (line 1528) | fn select_spare_research_launches_uses_idle_capacity_for_backed_off_no_p... function select_spare_research_launches_waits_when_demand_lookup_is_active (line 1599) | fn select_spare_research_launches_waits_when_demand_lookup_is_active() { function candidate_selection_reason_labels_fairness_support_yield_reuse_and_due (line 1634) | fn candidate_selection_reason_labels_fairness_support_yield_reuse_and_du... FILE: src/dht/service/planner/test_support.rs function peer (line 6) | pub(super) fn peer(addr: &str) -> SocketAddr { function hash_index (line 10) | pub(super) fn hash_index(index: u32) -> InfoHash { function demand_for_fuzz_class (line 16) | pub(super) fn demand_for_fuzz_class(class: u8, connected_peers: u8) -> D... function count_candidate_classes (line 33) | pub(super) fn count_candidate_classes(candidates: &[DueDemandCandidate])... function test_instant_saturating_sub (line 41) | pub(super) fn test_instant_saturating_sub(now: Instant, duration: Durati... type PlannerCandidateSpec (line 46) | pub(super) struct PlannerCandidateSpec { function planner_candidate_strategy (line 56) | pub(super) fn planner_candidate_strategy() -> impl Strategy impl Strategy impl Strategy { function active_lookup (line 212) | pub(super) fn active_lookup(lookup_id: LookupId, class: DemandSliceClass... function synthetic_peers (line 219) | pub(super) fn synthetic_peers(key: u8, count: u8) -> HashSet { function lookup_state_for_family (line 230) | pub(super) fn lookup_state_for_family( function insert_synthetic_drain (line 261) | pub(super) fn insert_synthetic_drain( function insert_synthetic_drain_with_stop_reason (line 283) | pub(super) fn insert_synthetic_drain_with_stop_reason( function prop_stop_reason (line 322) | pub(super) fn prop_stop_reason(code: u8) -> DemandSliceStopReason { type PlannerMachine (line 331) | pub(super) struct PlannerMachine { method new (line 338) | pub(super) fn new() -> Self { method advance (line 347) | pub(super) fn advance(&mut self, advance_ms: u16) { method plan_tick (line 351) | pub(super) fn plan_tick(&mut self, runtime_available: bool, fail_mask:... method finish_active (line 382) | pub(super) fn finish_active(&mut self, key: u8, unique_peers: u8) { method park_active (line 397) | pub(super) fn park_active(&mut self, key: u8, unique_peers: u8, stop_r... method finalize_drain (line 466) | pub(super) fn finalize_drain(&mut self, key: u8) { method finalize_drain_hash (line 470) | pub(super) fn finalize_drain_hash(&mut self, info_hash: InfoHash) { method apply (line 498) | pub(super) fn apply(&mut self, op: PlannerMachineOp) { method assert_invariants (line 596) | pub(super) fn assert_invariants(&self) -> Result<(), TestCaseError> { FILE: src/dht/service/planner/types.rs type ActiveDemandLookup (line 7) | pub(in crate::dht::service) struct ActiveDemandLookup { type DrainingDemandLookup (line 13) | pub(in crate::dht::service) struct DrainingDemandLookup { method record_peers (line 28) | pub(in crate::dht::service) fn record_peers(&mut self, peers: &[Socket... method unique_peer_count (line 37) | pub(in crate::dht::service) fn unique_peer_count(&self) -> usize { method late_unique_peer_count (line 41) | pub(in crate::dht::service) fn late_unique_peer_count(&self) -> usize { method duration_ms (line 46) | pub(in crate::dht::service) fn duration_ms(&self, now: Instant) -> u64 { type DrainedDemandOutcome (line 52) | pub(in crate::dht::service) struct DrainedDemandOutcome { type DemandPlannerState (line 64) | pub(in crate::dht::service) struct DemandPlannerState { method note_start (line 72) | pub(in crate::dht::service) fn note_start(&mut self, now: Instant) { method note_finish (line 76) | pub(in crate::dht::service) fn note_finish(&mut self, now: Instant, un... type DemandLaunchTokenBucket (line 86) | pub(in crate::dht::service) struct DemandLaunchTokenBucket { method new (line 95) | pub(in crate::dht::service) fn new(refill_per_minute: u64, burst: u64,... method refill (line 106) | pub(in crate::dht::service) fn refill(&mut self, now: Instant) { method try_consume (line 129) | pub(in crate::dht::service) fn try_consume(&mut self, now: Instant) ->... method refund (line 139) | pub(in crate::dht::service) fn refund(&mut self) { method available (line 146) | pub(in crate::dht::service) fn available(&self) -> usize { type DemandPlannerBudget (line 152) | pub(in crate::dht::service) struct DemandPlannerBudget { method new (line 159) | pub(in crate::dht::service) fn new(now: Instant) -> Self { method bucket_mut (line 179) | pub(in crate::dht::service) fn bucket_mut( method refill (line 190) | pub(in crate::dht::service) fn refill(&mut self, now: Instant) { method try_consume (line 196) | pub(in crate::dht::service) fn try_consume( method refund (line 204) | pub(in crate::dht::service) fn refund(&mut self, class: DemandSliceCla... method available (line 208) | pub(in crate::dht::service) fn available( type DemandSlotCounts (line 219) | pub(in crate::dht::service) struct DemandSlotCounts { method count (line 226) | pub(in crate::dht::service) fn count(self, class: DemandSliceClass) ->... method total (line 234) | pub(in crate::dht::service) fn total(self) -> usize { method record (line 240) | pub(in crate::dht::service) fn record(&mut self, class: DemandSliceCla... type DemandPlannerSelectionStats (line 256) | pub(in crate::dht::service) struct DemandPlannerSelectionStats { method record_throttled_age (line 266) | pub(in crate::dht::service) fn record_throttled_age( type DemandPlannerSelection (line 286) | pub(in crate::dht::service) struct DemandPlannerSelection { type DemandPlannerAction (line 292) | pub(in crate::dht::service) enum DemandPlannerAction<'a> { type DemandStartLookupEffect (line 375) | pub(in crate::dht::service) struct DemandStartLookupEffect { type DemandLookupFinishedEffect (line 382) | pub(in crate::dht::service) struct DemandLookupFinishedEffect { type DemandDrainAdmissionSnapshot (line 393) | pub(in crate::dht::service) struct DemandDrainAdmissionSnapshot { type DemandAdmitDrainEffect (line 400) | pub(in crate::dht::service) struct DemandAdmitDrainEffect { type DemandLookupParkedEffect (line 411) | pub(in crate::dht::service) struct DemandLookupParkedEffect { type DemandDrainFinalizedEffect (line 425) | pub(in crate::dht::service) struct DemandDrainFinalizedEffect { type DemandParkActiveLookupEffect (line 436) | pub(in crate::dht::service) struct DemandParkActiveLookupEffect { type DemandCancelDrainingLookupEffect (line 443) | pub(in crate::dht::service) struct DemandCancelDrainingLookupEffect { type DemandFinalizeDrainingLookupEffect (line 449) | pub(in crate::dht::service) struct DemandFinalizeDrainingLookupEffect { type DemandDrainPeersRecordedEffect (line 455) | pub(in crate::dht::service) struct DemandDrainPeersRecordedEffect { type DemandPlannerEffect (line 463) | pub(in crate::dht::service) enum DemandPlannerEffect { type DemandPlannerPlanStats (line 476) | pub(in crate::dht::service) struct DemandPlannerPlanStats { type DemandPlannerReduction (line 494) | pub(in crate::dht::service) struct DemandPlannerReduction { type DemandPlannerIdleSpeedProbeStatus (line 500) | pub(in crate::dht::service) struct DemandPlannerIdleSpeedProbeStatus { type DemandPlannerIdleSpeedProbe (line 507) | pub(in crate::dht::service) struct DemandPlannerIdleSpeedProbe { method current_multiplier (line 524) | pub(in crate::dht::service) fn current_multiplier(&self, _now: Instant... method observe (line 528) | pub(in crate::dht::service) fn observe( method decay_after_activity (line 574) | fn decay_after_activity(&mut self, now: Instant) { method status (line 598) | fn status(&self, demand_count: usize) -> DemandPlannerIdleSpeedProbeSt... method default (line 514) | fn default() -> Self { type DemandPlannerModel (line 609) | pub(in crate::dht::service) struct DemandPlannerModel { method new (line 623) | pub(in crate::dht::service) fn new(now: Instant) -> Self { method has_draining_demands (line 643) | pub(in crate::dht::service) fn has_draining_demands(&self) -> bool { method metadata_waiter_count (line 647) | pub(in crate::dht::service) fn metadata_waiter_count(&self) -> usize { method entry_snapshot (line 657) | pub(in crate::dht::service) fn entry_snapshot( method current_power_scale_halves (line 664) | pub(in crate::dht::service) fn current_power_scale_halves(&mut self, n... type DemandPeerPressureCap (line 675) | pub(in crate::dht::service) struct DemandPeerPressureCap { method update_usage (line 692) | pub(in crate::dht::service) fn update_usage( method advance (line 712) | pub(in crate::dht::service) fn advance(&mut self, now: Instant) -> u8 { method current_scale_halves (line 738) | pub(in crate::dht::service) fn current_scale_halves(&self) -> u8 { method target_scale_halves (line 742) | fn target_scale_halves(total_peers: usize, max_connected_peers: usize)... method default (line 682) | fn default() -> Self { function peer_pressure_at_least (line 759) | fn peer_pressure_at_least(total_peers: usize, max_connected_peers: usize... type DemandCrawlState (line 765) | pub(in crate::dht::service) struct DemandCrawlState { method new (line 776) | pub(in crate::dht::service) fn new(now: Instant, class: DemandSliceCla... method take_family_state (line 788) | pub(in crate::dht::service) fn take_family_state( method store_family_state (line 802) | pub(in crate::dht::service) fn store_family_state( method is_empty (line 815) | pub(in crate::dht::service) fn is_empty(&self) -> bool { method is_stale (line 819) | pub(in crate::dht::service) fn is_stale(&self, now: Instant) -> bool { method reset_reason_for (line 823) | pub(in crate::dht::service) fn reset_reason_for( method should_reset_for (line 842) | pub(in crate::dht::service) fn should_reset_for( method reset_for (line 850) | pub(in crate::dht::service) fn reset_for(&mut self, class: DemandSlice... method observe_parked_slice (line 860) | pub(in crate::dht::service) fn observe_parked_slice( type DemandSliceClass (line 894) | pub(in crate::dht::service) enum DemandSliceClass { method from_demand (line 901) | pub(in crate::dht::service) fn from_demand(demand: DhtDemandState) -> ... method stalled_empty_slice_reset_threshold (line 911) | pub(in crate::dht::service) fn stalled_empty_slice_reset_threshold(sel... method stalled_low_yield_slice_max_unique_peers (line 923) | pub(in crate::dht::service) fn stalled_low_yield_slice_max_unique_peer... method parked_slice_outcome (line 937) | pub(in crate::dht::service) fn parked_slice_outcome( method parked_quality_is_weak (line 965) | pub(in crate::dht::service) fn parked_quality_is_weak( type AggregateLookupQualitySnapshot (line 990) | pub(in crate::dht::service) struct AggregateLookupQualitySnapshot { method extend (line 999) | pub(in crate::dht::service) fn extend(&mut self, snapshot: LookupQuali... function aggregate_parked_crawl_quality (line 1012) | pub(in crate::dht::service) fn aggregate_parked_crawl_quality( type DemandSliceStopReason (line 1026) | pub(in crate::dht::service) enum DemandSliceStopReason { type DemandParkedSliceOutcome (line 1035) | pub(in crate::dht::service) enum DemandParkedSliceOutcome { type DemandCrawlResetReason (line 1044) | pub(in crate::dht::service) enum DemandCrawlResetReason { type DemandSelectionReason (line 1051) | pub(in crate::dht::service) enum DemandSelectionReason { type DemandSliceClassMetrics (line 1062) | pub(in crate::dht::service) struct DemandSliceClassMetrics { type DemandSliceMetrics (line 1085) | pub(in crate::dht::service) struct DemandSliceMetrics { method class_mut (line 1092) | pub(in crate::dht::service) fn class_mut( method class_ref (line 1103) | pub(in crate::dht::service) fn class_ref( method record_start (line 1114) | pub(in crate::dht::service) fn record_start(&mut self, class: DemandSl... method record_selection (line 1123) | pub(in crate::dht::service) fn record_selection( method record_stop (line 1157) | pub(in crate::dht::service) fn record_stop( method record_reset (line 1188) | pub(in crate::dht::service) fn record_reset( method has_activity (line 1207) | pub(in crate::dht::service) fn has_activity(&self) -> bool { method summary (line 1240) | pub(in crate::dht::service) fn summary(&self) -> String { function duration_ms (line 1275) | pub(in crate::dht::service) fn duration_ms(duration: Duration) -> u64 { type DemandLookupPlan (line 1280) | pub(in crate::dht::service) struct DemandLookupPlan { method for_demand (line 1292) | pub(in crate::dht::service) fn for_demand(demand: DhtDemandState) -> S... method for_demand_with_metrics (line 1296) | pub(in crate::dht::service) fn for_demand_with_metrics( method for_candidate (line 1344) | pub(in crate::dht::service) fn for_candidate( method for_candidate_with_peer_cap (line 1361) | pub(in crate::dht::service) fn for_candidate_with_peer_cap( method with_power_multiplier (line 1381) | fn with_power_multiplier(mut self, multiplier: u8, peer_pressure_cap_h... function scale_duration_halves (line 1396) | fn scale_duration_halves(duration: Duration, scale_halves: u8) -> Durati... function scale_usize_halves (line 1403) | fn scale_usize_halves(value: usize, scale_halves: u8) -> usize { function demand_lookup_power_multiplier (line 1410) | fn demand_lookup_power_multiplier( FILE: src/dht/service/replay_tests.rs type ServiceReplay (line 4) | struct ServiceReplay { method new (line 12) | fn new() -> Self { method advance (line 23) | fn advance(&mut self, duration: Duration) { method service (line 27) | fn service(&mut self, label: &'static str, action: DhtServiceAction) { method demand (line 36) | fn demand(&mut self, label: &'static str, action: DhtDemandCommandActi... method render (line 45) | fn render(&self) -> String { function service_effect_labels (line 50) | fn service_effect_labels(effects: &[DhtServiceEffect]) -> Vec { function demand_command_effect_labels (line 67) | fn demand_command_effect_labels(effects: &[DhtDemandCommandEffect]) -> V... function subscriber_effect_labels (line 88) | fn subscriber_effect_labels(effects: &[DemandSubscriberEffect]) -> Vec Vec { function service_state_label (line 178) | fn service_state_label(base: Instant, state: &DhtServiceState) -> String { function subscriber_labels (line 193) | fn subscriber_labels(state: &DhtServiceState) -> Vec { function entry_labels (line 206) | fn entry_labels(base: Instant, state: &DhtServiceState) -> Vec { function register_action (line 228) | fn register_action( function no_peer_demand (line 244) | fn no_peer_demand() -> DhtDemandState { function metadata_demand (line 251) | fn metadata_demand() -> DhtDemandState { function routine_demand (line 258) | fn routine_demand(connected_peers: usize) -> DhtDemandState { function dht_service_state_replays_demand_and_service_reductions_deterministically (line 266) | fn dht_service_state_replays_demand_and_service_reductions_deterministic... FILE: src/dht/service/runtime.rs type StartedLookup (line 9) | pub(in crate::dht::service) struct StartedLookup { type LookupCancelGuard (line 15) | pub(in crate::dht::service) struct LookupCancelGuard { method drop (line 21) | fn drop(&mut self) { type ManagedLookupReceiver (line 35) | pub(in crate::dht::service) struct ManagedLookupReceiver { method new (line 41) | pub(in crate::dht::service) fn new( method empty (line 60) | pub(in crate::dht::service) fn empty() -> Self { method recv (line 68) | pub(in crate::dht::service) async fn recv(&mut self) -> Option Option( FILE: src/dht/service/runtime_command_replay_tests.rs type RuntimeCommandReplay (line 5) | struct RuntimeCommandReplay { method action (line 10) | fn action(&mut self, label: &'static str, action: DhtRuntimeCommandAct... method command (line 18) | fn command(&mut self, label: &'static str, command: DhtCommand) { method render (line 30) | fn render(&self) -> String { function runtime_effect_labels (line 35) | fn runtime_effect_labels(effects: &[DhtRuntimeCommandEffect]) -> Vec &'static str { type DhtDemandCommandEffect (line 56) | pub(in crate::dht::service) enum DhtDemandCommandEffect { method kind (line 328) | fn kind(&self) -> &'static str { type DhtDemandCommandReduction (line 67) | pub(in crate::dht::service) struct DhtDemandCommandReduction { method update_demand_command_from_command (line 72) | pub(in crate::dht::service) fn update_demand_command_from_command( method update_demand_command (line 133) | pub(in crate::dht::service) fn update_demand_command( method reduce_subscriber_planner_followups (line 286) | fn reduce_subscriber_planner_followups( FILE: src/dht/service/state/mod.rs type DhtServiceState (line 20) | pub(super) struct DhtServiceState { method new (line 29) | pub(super) fn new(config: DhtServiceConfig, generation: u64, warning: ... method has_draining_demands (line 39) | pub(super) fn has_draining_demands(&self) -> bool { method record_recent_peers (line 43) | pub(super) fn record_recent_peers(&mut self, peers: &[SocketAddr]) { method expire_recent_peers (line 47) | pub(super) fn expire_recent_peers(&mut self) { method update_service_action (line 51) | pub(super) fn update_service_action( method update_demand_planner_action (line 58) | pub(in crate::dht::service) fn update_demand_planner_action( FILE: src/dht/service/state/service.rs type DhtServiceAction (line 7) | pub(in crate::dht::service) enum DhtServiceAction { method kind (line 123) | fn kind(&self) -> &'static str { type DhtServiceEffect (line 25) | pub(in crate::dht::service) enum DhtServiceEffect { method kind (line 134) | fn kind(&self) -> &'static str { type DhtServiceReduction (line 33) | pub(in crate::dht::service) struct DhtServiceReduction { type DhtServiceModel (line 38) | pub(in crate::dht::service) struct DhtServiceModel { method new (line 45) | pub(in crate::dht::service) fn new( method config (line 57) | pub(in crate::dht::service) fn config(&self) -> &DhtServiceConfig { method generation (line 61) | pub(in crate::dht::service) fn generation(&self) -> u64 { method warning_owned (line 65) | pub(in crate::dht::service) fn warning_owned(&self) -> Option { method update (line 69) | pub(in crate::dht::service) fn update( FILE: src/dht/service/state_tests.rs function dht_service_model_reconfigure_success_updates_state_and_emits_followups (line 5) | fn dht_service_model_reconfigure_success_updates_state_and_emits_followu... function dht_service_model_reconfigure_request_emits_runtime_build_effect (line 39) | fn dht_service_model_reconfigure_request_emits_runtime_build_effect() { function dht_service_model_reconfigure_failure_preserves_config_and_generation (line 62) | fn dht_service_model_reconfigure_failure_preserves_config_and_generation... function dht_service_model_reconfigure_failure_resets_dependents_when_runtime_was_lost (line 86) | fn dht_service_model_reconfigure_failure_resets_dependents_when_runtime_... function dht_service_model_runtime_warning_only_publishes_status (line 116) | fn dht_service_model_runtime_warning_only_publishes_status() { function dht_service_state_initializes_helper_models (line 130) | fn dht_service_state_initializes_helper_models() { function dht_service_state_reduces_demand_commands_only (line 149) | fn dht_service_state_reduces_demand_commands_only() { function dht_demand_command_register_and_unregister_emit_subscriber_effects (line 198) | fn dht_demand_command_register_and_unregister_emit_subscriber_effects() { function dht_demand_command_peer_and_finish_actions_emit_planner_followups (line 309) | fn dht_demand_command_peer_and_finish_actions_emit_planner_followups() { function dht_demand_command_prune_dead_subscribers_updates_planner_state (line 376) | fn dht_demand_command_prune_dead_subscribers_updates_planner_state() { function dht_demand_subscriber_effect_delivery_failure_prunes_through_reducer (line 430) | fn dht_demand_subscriber_effect_delivery_failure_prunes_through_reducer() { FILE: src/dht/service/status.rs type DhtHealthSnapshot (line 15) | pub struct DhtHealthSnapshot { type DhtSizeEstimate (line 46) | pub struct DhtSizeEstimate { type DhtStatus (line 53) | pub struct DhtStatus { type DhtWaveTelemetry (line 60) | pub struct DhtWaveTelemetry { type RecentUniquePeers (line 71) | pub(in crate::dht::service) struct RecentUniquePeers { method new (line 78) | pub(in crate::dht::service) fn new(window: Duration) -> Self { method record_batch (line 86) | pub(in crate::dht::service) fn record_batch(&mut self, now: Instant, p... method evict_expired (line 94) | fn evict_expired(&mut self, now: Instant) { method unique_count (line 106) | pub(in crate::dht::service) fn unique_count(&mut self, now: Instant) -... function build_status (line 112) | pub(super) fn build_status( function publish_status (line 165) | pub(super) fn publish_status( function build_wave_telemetry (line 189) | pub(super) fn build_wave_telemetry( function publish_wave_telemetry (line 220) | pub(super) fn publish_wave_telemetry( FILE: src/dht/service/status_tests.rs function recent_unique_peers_dedupes_and_expires_entries (line 6) | fn recent_unique_peers_dedupes_and_expires_entries() { function literal_bootstrap_summary_counts_literal_socket_addresses (line 23) | fn literal_bootstrap_summary_counts_literal_socket_addresses() { function build_status_without_runtime_reports_disabled_state_and_bootstrap (line 35) | fn build_status_without_runtime_reports_disabled_state_and_bootstrap() { function publish_status_without_runtime_preserves_configured_bootstrap (line 66) | fn publish_status_without_runtime_preserves_configured_bootstrap() { function build_wave_telemetry_without_runtime_preserves_recent_unique_count (line 97) | fn build_wave_telemetry_without_runtime_preserves_recent_unique_count() { FILE: src/dht/service/subscriber_tests.rs function demand_subscriber_registry_registers_and_unregisters_once (line 5) | fn demand_subscriber_registry_registers_and_unregisters_once() { function demand_subscriber_registry_delivery_prunes_closed_subscribers (line 57) | fn demand_subscriber_registry_delivery_prunes_closed_subscribers() { FILE: src/dht/service/subscribers.rs type DemandSubscriberDelivery (line 11) | pub(super) struct DemandSubscriberDelivery { type DemandSubscriberAction (line 16) | pub(super) enum DemandSubscriberAction { type DemandSubscriberEffect (line 36) | pub(super) enum DemandSubscriberEffect { type DemandSubscriberReduction (line 53) | pub(super) struct DemandSubscriberReduction { type DemandSubscriberRegistry (line 58) | pub(super) struct DemandSubscriberRegistry { method new (line 64) | pub(super) fn new() -> Self { method update (line 71) | pub(super) fn update(&mut self, action: DemandSubscriberAction) -> Dem... method subscriber_count (line 151) | pub(super) fn subscriber_count(&self, info_hash: InfoHash) -> usize { method remove_subscriber (line 155) | fn remove_subscriber(&mut self, info_hash: InfoHash, subscriber_id: u6... FILE: src/dht/service/test_support.rs function peer (line 5) | pub(super) fn peer(addr: &str) -> SocketAddr { function hash_index (line 9) | pub(super) fn hash_index(index: u32) -> InfoHash { function active_lookup (line 15) | pub(super) fn active_lookup(lookup_id: LookupId, class: DemandSliceClass... function synthetic_peers (line 22) | pub(super) fn synthetic_peers(key: u8, count: u8) -> HashSet { function lookup_state_for_family (line 33) | pub(super) fn lookup_state_for_family( function disabled_service_config (line 64) | pub(super) fn disabled_service_config() -> DhtServiceConfig { function initial_disabled_status (line 73) | pub(super) fn initial_disabled_status(config: &DhtServiceConfig) -> DhtS... function local_ipv4_active_runtime (line 83) | pub(super) async fn local_ipv4_active_runtime() -> ActiveRuntime { function local_ipv4_active_runtime_without_bootstrap (line 88) | pub(super) async fn local_ipv4_active_runtime_without_bootstrap() -> Act... function local_ipv4_active_runtime_with_bootstrap (line 92) | pub(super) async fn local_ipv4_active_runtime_with_bootstrap( function insert_synthetic_drain (line 119) | pub(super) fn insert_synthetic_drain( function insert_synthetic_drain_with_stop_reason (line 141) | pub(super) fn insert_synthetic_drain_with_stop_reason( FILE: src/dht/test_support.rs function seeded_node_id (line 6) | pub fn seeded_node_id(seed: u8) -> NodeId { function seeded_info_hash (line 14) | pub fn seeded_info_hash(seed: u8) -> InfoHash { FILE: src/dht/token.rs type TokenConfig (line 10) | pub struct TokenConfig { method default (line 16) | fn default() -> Self { type RollingSecret (line 25) | struct RollingSecret { type TokenService (line 31) | pub struct TokenService { method new (line 38) | pub fn new(config: TokenConfig, now: Instant) -> Self { method config (line 49) | pub fn config(&self) -> &TokenConfig { method mint_for (line 53) | pub fn mint_for(&mut self, addr: IpAddr, info_hash: InfoHash, now: Ins... method validate_for (line 58) | pub fn validate_for( method rotate_if_due (line 80) | fn rotate_if_due(&mut self, now: Instant) { method drop_expired_previous (line 95) | fn drop_expired_previous(&mut self, now: Instant) { function derive_token (line 104) | fn derive_token(secret: &[u8; 32], addr: IpAddr, info_hash: InfoHash) ->... function info_hash (line 120) | fn info_hash(byte: u8) -> InfoHash { function tokens_are_scoped_to_info_hash (line 125) | fn tokens_are_scoped_to_info_hash() { function previous_secret_acceptance_keeps_info_hash_scope (line 136) | fn previous_secret_acceptance_keeps_info_hash_scope() { FILE: src/dht/transport.rs constant DEFAULT_SOCKET_BUFFER (line 25) | const DEFAULT_SOCKET_BUFFER: usize = 16 * 1024; type SourceValidationMode (line 28) | pub enum SourceValidationMode { type TransportConfig (line 35) | pub struct TransportConfig { method default (line 45) | fn default() -> Self { type TransportReply (line 61) | pub enum TransportReply { method response_body (line 67) | pub fn response_body(self) -> Option { method response (line 74) | pub fn response(&self) -> Option<&KrpcResponseEnvelope> { type TransportEvent (line 83) | pub enum TransportEvent { type InflightQuery (line 99) | struct InflightQuery { type InflightQueryGuard (line 105) | struct InflightQueryGuard { method new (line 111) | fn new( method disarm (line 121) | fn disarm(&mut self) { method drop (line 127) | fn drop(&mut self) { type TransportActorInner (line 138) | struct TransportActorInner { method drop (line 149) | fn drop(&mut self) { type TransportActor (line 155) | pub struct TransportActor { method bind (line 160) | pub async fn bind( method family (line 198) | pub fn family(&self) -> AddressFamily { method config (line 202) | pub fn config(&self) -> &TransportConfig { method local_addr (line 206) | pub fn local_addr(&self) -> io::Result { method inflight_query_count (line 210) | pub fn inflight_query_count(&self) -> usize { method send_message (line 218) | pub async fn send_message(&self, target: SocketAddr, message: &M) -... method send_response (line 227) | pub async fn send_response( method send_error (line 235) | pub async fn send_error( method ping (line 243) | pub async fn ping( method find_node (line 252) | pub async fn find_node( method get_peers (line 266) | pub async fn get_peers( method announce_peer (line 280) | pub async fn announce_peer( method send_query (line 301) | pub async fn send_query( method send_query_with_timeout (line 314) | pub async fn send_query_with_timeout( method send_query_deferred (line 344) | pub async fn send_query_deferred( method register_inflight_query (line 369) | fn register_inflight_query( method cancel_inflight_query (line 398) | pub fn cancel_inflight_query(&self, transaction_id: TransactionId) -> ... method cancel_all_inflight_queries (line 409) | pub fn cancel_all_inflight_queries(&self) { method actor_ref_count (line 417) | pub fn actor_ref_count(&self) -> usize { method shutdown (line 421) | pub async fn shutdown(&self) { method spawn_receive_loop (line 434) | fn spawn_receive_loop( function handle_reply (line 510) | fn handle_reply( function normalize_bind_addr (line 555) | fn normalize_bind_addr(bind_addr: SocketAddr, family: AddressFamily) -> ... function bind_udp_socket (line 564) | fn bind_udp_socket(bind_addr: SocketAddr, family: AddressFamily) -> io::... function is_transient_udp_recv_error (line 579) | fn is_transient_udp_recv_error(error: &io::Error) -> bool { function ipv6_transport_bind_is_v6_only_for_shared_dht_port (line 596) | async fn ipv6_transport_bind_is_v6_only_for_shared_dht_port() { function ipv6_bind_unavailable (line 625) | fn ipv6_bind_unavailable(error: &io::Error) -> bool { FILE: src/dht/types.rs type AddressFamily (line 11) | pub enum AddressFamily { method for_addr (line 18) | pub const fn for_addr(addr: SocketAddr) -> Self { method is_ipv6 (line 26) | pub const fn is_ipv6(self) -> bool { function is_routable_dht_addr (line 31) | pub fn is_routable_dht_addr(addr: SocketAddr) -> bool { function is_routable_ipv4 (line 38) | fn is_routable_ipv4(ip: Ipv4Addr) -> bool { function is_routable_ipv6 (line 53) | fn is_routable_ipv6(ip: Ipv6Addr) -> bool { type FixedLengthError (line 67) | pub struct FixedLengthError { method fmt (line 73) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { type NodeId (line 85) | pub struct NodeId([u8; 20]); constant LEN (line 88) | pub const LEN: usize = 20; method new (line 90) | pub const fn new(bytes: [u8; 20]) -> Self { method into_bytes (line 94) | pub const fn into_bytes(self) -> [u8; 20] { method as_array (line 98) | pub const fn as_array(&self) -> &[u8; 20] { method first_21_bits (line 102) | pub fn first_21_bits(&self) -> [u8; 3] { method from (line 108) | fn from(value: [u8; 20]) -> Self { method from (line 114) | fn from(value: InfoHash) -> Self { method as_ref (line 120) | fn as_ref(&self) -> &[u8] { type Error (line 126) | type Error = FixedLengthError; method try_from (line 128) | fn try_from(value: &[u8]) -> Result { type InfoHash (line 143) | pub struct InfoHash([u8; 20]); constant LEN (line 146) | pub const LEN: usize = 20; method new (line 148) | pub const fn new(bytes: [u8; 20]) -> Self { method into_bytes (line 152) | pub const fn into_bytes(self) -> [u8; 20] { method as_array (line 156) | pub const fn as_array(&self) -> &[u8; 20] { method from (line 162) | fn from(value: [u8; 20]) -> Self { method from (line 168) | fn from(value: NodeId) -> Self { method as_ref (line 174) | fn as_ref(&self) -> &[u8] { type Error (line 180) | type Error = FixedLengthError; method try_from (line 182) | fn try_from(value: &[u8]) -> Result { type TransactionId (line 197) | pub struct TransactionId([u8; 4]); constant LEN (line 200) | pub const LEN: usize = 4; method new (line 202) | pub const fn new(bytes: [u8; 4]) -> Self { method into_bytes (line 206) | pub const fn into_bytes(self) -> [u8; 4] { method as_array (line 210) | pub const fn as_array(&self) -> &[u8; 4] { method from (line 216) | fn from(value: [u8; 4]) -> Self { method as_ref (line 222) | fn as_ref(&self) -> &[u8] { type Error (line 228) | type Error = FixedLengthError; method try_from (line 230) | fn try_from(value: &[u8]) -> Result { type LookupId (line 245) | pub struct LookupId(pub u64); type CompactNode (line 248) | pub struct CompactNode { method family (line 254) | pub const fn family(&self) -> AddressFamily { type CompactPeer (line 260) | pub struct CompactPeer { method family (line 265) | pub const fn family(&self) -> AddressFamily { type NodeTrust (line 271) | pub enum NodeTrust { type Bep42State (line 279) | pub enum Bep42State { type NodeRecord (line 288) | pub struct NodeRecord { method family (line 304) | pub const fn family(&self) -> AddressFamily { method new (line 308) | pub fn new(addr: SocketAddr, node_id: Option, now: Instant) ->... method note_query_sent (line 325) | pub fn note_query_sent(&mut self, now: Instant) { method note_query_response (line 330) | pub fn note_query_response(&mut self, node_id: Option, now: In... method note_inbound_query (line 345) | pub fn note_inbound_query(&mut self, now: Instant) { method note_failure (line 350) | pub fn note_failure(&mut self, now: Instant) { method note_live_referral (line 355) | pub fn note_live_referral(&mut self, now: Instant) { method note_dead_referral (line 360) | pub fn note_dead_referral(&mut self, now: Instant) { FILE: src/dht_stub.rs constant DHT_LOOKUP_REFRESH_INTERVAL (line 18) | const DHT_LOOKUP_REFRESH_INTERVAL: Duration = Duration::from_secs(60); type DhtBackendKind (line 21) | pub enum DhtBackendKind { type DhtServiceConfig (line 29) | pub struct DhtServiceConfig { method from_settings (line 38) | pub fn from_settings(settings: &Settings) -> Self { type DhtHealthSnapshot (line 51) | pub struct DhtHealthSnapshot { type DhtSizeEstimate (line 82) | pub struct DhtSizeEstimate { type DhtStatus (line 89) | pub struct DhtStatus { type DhtWaveTelemetry (line 96) | pub struct DhtWaveTelemetry { type DhtLookupRun (line 107) | pub struct DhtLookupRun { type DhtDemandState (line 119) | pub struct DhtDemandState { type DhtDemandMetrics (line 125) | pub struct DhtDemandMetrics { type DhtService (line 145) | pub struct DhtService { method new (line 152) | pub async fn new( method handle (line 173) | pub fn handle(&self) -> DhtHandle { method subscribe_status (line 177) | pub fn subscribe_status(&self) -> watch::Receiver { method current_status (line 181) | pub fn current_status(&self) -> DhtStatus { method current_wave_telemetry (line 185) | pub fn current_wave_telemetry(&self) -> DhtWaveTelemetry { method current_warning (line 189) | pub fn current_warning(&self) -> Option { method reconfigure (line 193) | pub fn reconfigure(&self, config: DhtServiceConfig) { method update_peer_slot_usage (line 206) | pub fn update_peer_slot_usage(&self, total_peers: usize, max_connected... method from_test_recorder (line 222) | pub(crate) fn from_test_recorder(recorder: TestDhtRecorder) -> Self { function configured_status_from_settings (line 233) | pub fn configured_status_from_settings(settings: &Settings) -> DhtStatus { function configured_status_from_config (line 237) | fn configured_status_from_config(config: &DhtServiceConfig) -> DhtStatus { type BootstrapSummary (line 255) | struct BootstrapSummary { function literal_bootstrap_summary (line 261) | fn literal_bootstrap_summary(bootstrap_nodes: &[String]) -> BootstrapSum... type AnnounceRequests (line 279) | type AnnounceRequests = Arc, Option)>>>; type ReconfigureRequests (line 282) | type ReconfigureRequests = Arc>>; type PeerSlotUsages (line 285) | type PeerSlotUsages = Arc>>; type TestDhtRecorder (line 289) | pub(crate) struct TestDhtRecorder { method recorded_announces (line 297) | pub(crate) fn recorded_announces(&self) -> Vec<(Vec, Option)> { method recorded_reconfigures (line 304) | pub(crate) fn recorded_reconfigures(&self) -> Vec { method recorded_peer_slot_usages (line 311) | pub(crate) fn recorded_peer_slot_usages(&self) -> Vec<(usize, usize)> { type DhtHandle (line 320) | pub struct DhtHandle { method fmt (line 327) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { method disabled (line 343) | pub fn disabled() -> Self { method from_test_recorder (line 362) | fn from_test_recorder(recorder: TestDhtRecorder) -> Self { method status_snapshot (line 379) | pub async fn status_snapshot(&self) -> DhtStatus { method spawn_lookup_task (line 383) | pub fn spawn_lookup_task( method update_demand (line 401) | pub fn update_demand(&self, _info_hash: Vec, _demand: DhtDemandSta... method update_demand_metrics (line 405) | pub fn update_demand_metrics( method lookup_once (line 413) | pub async fn lookup_once( method announce_peer (line 422) | pub async fn announce_peer(&self, info_hash: Vec, port: Option &watch::Receiver { method default (line 337) | fn default() -> Self { FILE: src/errors.rs type TrackerError (line 7) | pub enum TrackerError { type StorageError (line 28) | pub enum StorageError { method from (line 46) | fn from(error: std::io::Error) -> Self { method indicates_data_unavailability (line 55) | pub fn indicates_data_unavailability(&self) -> bool { function wrong_type_path_io_errors_mark_data_unavailable (line 75) | fn wrong_type_path_io_errors_mark_data_unavailable() { FILE: src/fs_atomic.rs constant SCHEMA_VERSION (line 12) | pub(crate) const SCHEMA_VERSION: u32 = 1; function temp_path_for (line 16) | fn temp_path_for(path: &Path) -> PathBuf { function write_bytes_atomically (line 30) | pub(crate) fn write_bytes_atomically(path: &Path, bytes: &[u8]) -> io::R... function write_string_atomically (line 47) | pub(crate) fn write_string_atomically(path: &Path, content: &str) -> io:... function serialize_versioned_toml (line 51) | pub(crate) fn serialize_versioned_toml(value: &T) -> io::R... function deserialize_versioned_toml (line 63) | pub(crate) fn deserialize_versioned_toml(content: &... function write_toml_atomically (line 97) | pub(crate) fn write_toml_atomically(path: &Path, value: &T... function serialize_versioned_json (line 102) | pub(crate) fn serialize_versioned_json(value: &T) -> io::R... function deserialize_versioned_json (line 114) | pub(crate) fn deserialize_versioned_json(content: &... function write_bytes_atomically_async (line 147) | pub(crate) async fn write_bytes_atomically_async(path: &Path, bytes: &[u... function write_bytes_atomically_replaces_file_without_leaving_tmp (line 170) | fn write_bytes_atomically_replaces_file_without_leaving_tmp() { function temp_paths_are_unique_for_same_target (line 188) | fn temp_paths_are_unique_for_same_target() { function write_bytes_atomically_removes_tmp_when_rename_fails (line 199) | fn write_bytes_atomically_removes_tmp_when_rename_fails() { FILE: src/integrations/cli.rs type Cli (line 25) | pub struct Cli { type Commands (line 37) | pub enum Commands { type CliPriority (line 194) | pub enum CliPriority { type SyntheticLoadMode (line 202) | pub enum SyntheticLoadMode { type SyntheticLoadAddMode (line 210) | pub enum SyntheticLoadAddMode { type SyntheticBenchmarkArgs (line 218) | pub struct SyntheticBenchmarkArgs { type SyntheticLoadArgs (line 296) | pub struct SyntheticLoadArgs { type StatusCommandMode (line 370) | pub enum StatusCommandMode { method from (line 378) | fn from(value: CliPriority) -> Self { function write_input_command (line 387) | pub fn write_input_command(input_str: &str, watch_path: &Path) -> io::Re... function write_path_command_payload (line 435) | pub fn write_path_command_payload( function write_stop_command (line 460) | pub fn write_stop_command(watch_path: &Path) -> io::Result { function command_to_control_requests (line 468) | pub fn command_to_control_requests( function command_to_control_requests_with_resolver (line 474) | pub fn command_to_control_requests_with_resolver( function status_command_mode (line 557) | pub fn status_command_mode(command: &Commands) -> Result Result Result Res... function expand_add_inputs (line 633) | pub fn expand_add_inputs(inputs: &[String]) -> Vec { function write_control_command (line 661) | pub fn write_control_command(request: &ControlRequest, watch_path: &Path... function wait_for_status_json_after (line 665) | pub fn wait_for_status_json_after( function status_file_modified_at (line 697) | pub fn status_file_modified_at() -> io::Result> { function setup_temp_dir (line 714) | fn setup_temp_dir() -> (PathBuf, impl Drop) { function test_process_input_magnet (line 729) | fn test_process_input_magnet() { function test_process_input_torrent_path (line 749) | fn test_process_input_torrent_path() { function test_process_invalid_path (line 783) | fn test_process_invalid_path() { function status_command_maps_to_runtime_requests (line 797) | fn status_command_maps_to_runtime_requests() { function status_interval_maps_to_runtime_request_without_follow (line 811) | fn status_interval_maps_to_runtime_request_without_follow() { function priority_requires_one_target (line 829) | fn priority_requires_one_target() { function journal_command_is_not_mapped_to_control_request (line 840) | fn journal_command_is_not_mapped_to_control_request() { function torrents_command_is_not_mapped_to_control_request (line 850) | fn torrents_command_is_not_mapped_to_control_request() { function info_command_is_not_mapped_to_control_request (line 858) | fn info_command_is_not_mapped_to_control_request() { function remove_without_target_returns_helpful_error (line 868) | fn remove_without_target_returns_helpful_error() { function shared_config_commands_are_not_mapped_to_control_request (line 879) | fn shared_config_commands_are_not_mapped_to_control_request() { function remove_command_supports_multiple_hashes (line 897) | fn remove_command_supports_multiple_hashes() { function purge_requires_at_least_one_target (line 910) | fn purge_requires_at_least_one_target() { function add_command_expands_comma_separated_non_magnet_inputs (line 916) | fn add_command_expands_comma_separated_non_magnet_inputs() { function cli_priority_command_parses_without_panicking (line 925) | fn cli_priority_command_parses_without_panicking() { function resolved_pause_command_supports_file_lookup (line 955) | fn resolved_pause_command_supports_file_lookup() { function cli_set_shared_config_command_parses_without_panicking (line 978) | fn cli_set_shared_config_command_parses_without_panicking() { function cli_set_host_id_command_parses_without_panicking (line 997) | fn cli_set_host_id_command_parses_without_panicking() { function cli_to_shared_command_parses_without_panicking (line 1012) | fn cli_to_shared_command_parses_without_panicking() { FILE: src/integrations/control.rs type ControlPriorityTarget (line 17) | pub enum ControlPriorityTarget { type ControlFilePriorityOverride (line 24) | pub struct ControlFilePriorityOverride { method default (line 30) | fn default() -> Self { type ControlRequest (line 40) | pub enum ControlRequest { method action_name (line 79) | pub fn action_name(&self) -> &'static str { method target_info_hash_hex (line 93) | pub fn target_info_hash_hex(&self) -> Option<&str> { method priority_target (line 107) | pub fn priority_target(&self) -> Option<&ControlPriorityTarget> { method priority_value (line 114) | pub fn priority_value(&self) -> Option { function write_control_request (line 122) | pub fn write_control_request(request: &ControlRequest, watch_path: &Path... function read_control_request (line 136) | pub fn read_control_request(path: &Path) -> io::Result { function round_trip_control_request_file (line 147) | fn round_trip_control_request_file() { FILE: src/integrations/rss_ingest.rs function write_magnet (line 10) | pub async fn write_magnet(settings: &Settings, magnet_link: &str) -> io:... function write_torrent_bytes (line 19) | pub async fn write_torrent_bytes( function rss_watch_dir (line 32) | fn rss_watch_dir(settings: &Settings) -> io::Result { FILE: src/integrations/rss_service.rs constant MIN_POLL_INTERVAL_SECS (line 19) | const MIN_POLL_INTERVAL_SECS: u64 = 30; constant REQUEST_TIMEOUT_SECS (line 20) | const REQUEST_TIMEOUT_SECS: u64 = 20; constant FEED_FETCH_MAX_ATTEMPTS (line 21) | const FEED_FETCH_MAX_ATTEMPTS: u32 = 3; constant FEED_RETRY_BASE_DELAY_MS (line 22) | const FEED_RETRY_BASE_DELAY_MS: u64 = 400; constant FEED_RETRY_MAX_JITTER_MS (line 23) | const FEED_RETRY_MAX_JITTER_MS: u64 = 250; type CandidateItem (line 26) | struct CandidateItem { function spawn_rss_service (line 36) | pub fn spawn_rss_service( function run_sync_until_shutdown (line 148) | async fn run_sync_until_shutdown( function run_sync (line 160) | async fn run_sync( function enabled_filters (line 330) | fn enabled_filters(settings: &Settings) -> Vec<(String, RssFilterMode)> { function title_matches_filters (line 341) | fn title_matches_filters( function fetch_and_parse_feed (line 362) | async fn fetch_and_parse_feed( function retry_delay_ms (line 436) | fn retry_delay_ms(feed_url: &str, attempt_index: u32) -> u64 { function fetch_and_parse_feed_with_retry (line 444) | async fn fetch_and_parse_feed_with_retry( function dedupe_key_for (line 472) | fn dedupe_key_for( function identity_keys_for (line 490) | fn identity_keys_for( function normalize_title (line 517) | fn normalize_title(input: &str) -> String { function auto_ingest_item (line 525) | async fn auto_ingest_item( function fetch_torrent_bytes (line 558) | async fn fetch_torrent_bytes(client: &Client, url: &str) -> Result Self { method drop (line 626) | fn drop(&mut self) { function dedupe_key_prefers_guid_then_link_then_title_source (line 645) | fn dedupe_key_prefers_guid_then_link_then_title_source() { function normalize_title_compacts_whitespace_and_case (line 657) | fn normalize_title_compacts_whitespace_and_case() { function retry_delay_has_jitter_and_increases_with_attempt (line 662) | fn retry_delay_has_jitter_and_increases_with_attempt() { function retry_delay_is_deterministic_for_same_input (line 673) | fn retry_delay_is_deterministic_for_same_input() { function rss_service_disabled_waits_for_shutdown (line 680) | async fn rss_service_disabled_waits_for_shutdown() { function rss_service_applies_runtime_settings_update_on_sync_now (line 710) | async fn rss_service_applies_runtime_settings_update_on_sync_now() { function rss_sync_match_and_auto_ingest_magnet_end_to_end (line 749) | async fn rss_sync_match_and_auto_ingest_magnet_end_to_end() { function rss_service_shutdown_interrupts_inflight_sync (line 866) | async fn rss_service_shutdown_interrupts_inflight_sync() { function rss_max_preview_items_zero_skips_processing_and_auto_ingest (line 915) | async fn rss_max_preview_items_zero_skips_processing_and_auto_ingest() { FILE: src/integrations/rss_url_safety.rs function ip_is_safe (line 7) | fn ip_is_safe(ip: IpAddr) -> bool { function resolved_ips_are_safe (line 28) | fn resolved_ips_are_safe(ips: I) -> bool function is_safe_rss_item_url (line 42) | pub(crate) async fn is_safe_rss_item_url(value: &str) -> bool { function rss_item_url_guard_rejects_localhost_and_private_literal_ips (line 85) | async fn rss_item_url_guard_rejects_localhost_and_private_literal_ips() { function ip_guard_rejects_private_and_accepts_public_literals (line 93) | fn ip_guard_rejects_private_and_accepts_public_literals() { function resolved_host_guard_rejects_any_private_result (line 101) | fn resolved_host_guard_rejects_any_private_result() { function resolved_host_guard_accepts_all_public_results (line 110) | fn resolved_host_guard_accepts_all_public_results() { FILE: src/integrations/status.rs type AppOutputState (line 24) | pub struct AppOutputState { type StatusConfig (line 41) | pub struct StatusConfig { function serialize_torrents_hex (line 50) | pub fn serialize_torrents_hex( function deserialize_torrents_hex (line 65) | pub fn deserialize_torrents_hex<'de, D>( type StatusTorrentMetrics (line 81) | struct StatusTorrentMetrics<'a> { function new (line 86) | fn new(metrics: &'a TorrentMetrics) -> Self { method serialize (line 92) | fn serialize(&self, serializer: S) -> Result function dump (line 151) | pub fn dump( function should_skip_status_dump (line 207) | fn should_skip_status_dump(generation: u64, latest_generation: &AtomicU6... function host_status_file_path (line 211) | pub fn host_status_file_path() -> io::Result { function cluster_status_file_path (line 225) | pub fn cluster_status_file_path() -> io::Result { function status_file_path (line 233) | pub fn status_file_path() -> io::Result { function read_cluster_output_state (line 237) | pub fn read_cluster_output_state() -> io::Result { function offline_output_state (line 242) | pub fn offline_output_state(settings: &Settings) -> AppOutputState { function offline_output_json (line 262) | pub fn offline_output_json(settings: &Settings) -> io::Result { function torrent_metrics_from_settings (line 266) | fn torrent_metrics_from_settings( function status_config_from_settings (line 285) | pub fn status_config_from_settings(settings: &Settings) -> StatusConfig { function test_serialize_torrents_hex_keys (line 304) | fn test_serialize_torrents_hex_keys() { function offline_output_json_builds_snapshot_from_settings (line 355) | fn offline_output_json_builds_snapshot_from_settings() { function stale_status_dump_generations_are_skipped (line 384) | fn stale_status_dump_generations_are_skipped() { function offline_output_state_includes_bootstrap_family_counts (line 392) | fn offline_output_state_includes_bootstrap_family_counts() { function read_cluster_output_state_defaults_missing_dht_field (line 409) | fn read_cluster_output_state_defaults_missing_dht_field() { FILE: src/integrations/watcher.rs function create_watcher (line 12) | pub fn create_watcher( function scan_watch_folder_paths (line 62) | pub fn scan_watch_folder_paths(watch_paths: &[PathBuf]) -> Vec { function path_to_command (line 82) | pub fn path_to_command(path: &Path) -> Option { function with_dummy_file (line 156) | fn with_dummy_file(name: &str, test_fn: F) function test_path_to_command_extensions (line 171) | fn test_path_to_command_extensions() { function test_path_to_command_control_file (line 189) | fn test_path_to_command_control_file() { function scan_watch_folder_paths_reads_provided_paths (line 205) | fn scan_watch_folder_paths_reads_provided_paths() { function create_watcher_emits_live_events_for_provided_watch_paths (line 217) | async fn create_watcher_emits_live_events_for_provided_watch_paths() { function test_path_to_command_special_files (line 264) | fn test_path_to_command_special_files() { function test_path_to_command_ignored (line 284) | fn test_path_to_command_ignored() { FILE: src/integrity_scheduler.rs constant INTEGRITY_SCHEDULER_TICK_INTERVAL (line 9) | pub const INTEGRITY_SCHEDULER_TICK_INTERVAL: Duration = Duration::from_s... constant PROBE_BATCH_MAX_FILES (line 11) | const PROBE_BATCH_MAX_FILES: usize = 256; constant MAX_IN_FLIGHT_PROBE_BATCHES (line 12) | const MAX_IN_FLIGHT_PROBE_BATCHES: usize = 2; constant PROBE_BATCH_TIMEOUT (line 13) | const PROBE_BATCH_TIMEOUT: Duration = Duration::from_secs(30); constant PENDING_METADATA_RETRY_INTERVAL (line 14) | const PENDING_METADATA_RETRY_INTERVAL: Duration = Duration::from_secs(15); constant RECOVERY_RETRY_INTERVAL (line 15) | const RECOVERY_RETRY_INTERVAL: Duration = Duration::from_secs(5); constant SMALL_MANIFEST_FILE_COUNT_THRESHOLD (line 16) | const SMALL_MANIFEST_FILE_COUNT_THRESHOLD: usize = 1_000; constant SMALL_MANIFEST_HEALTHY_RETRY_INTERVAL (line 17) | const SMALL_MANIFEST_HEALTHY_RETRY_INTERVAL: Duration = Duration::from_s... constant ACTIVE_HEALTHY_RETRY_INTERVAL (line 18) | const ACTIVE_HEALTHY_RETRY_INTERVAL: Duration = Duration::from_secs(5 * ... constant IDLE_HEALTHY_RETRY_INTERVAL (line 19) | const IDLE_HEALTHY_RETRY_INTERVAL: Duration = Duration::from_secs(30 * 60); constant DISPATCH_FAILURE_RETRY_INTERVAL (line 20) | const DISPATCH_FAILURE_RETRY_INTERVAL: Duration = Duration::from_secs(1); type DataAvailabilityState (line 23) | pub enum DataAvailabilityState { type IntegrityPriorityClass (line 30) | pub enum IntegrityPriorityClass { type TorrentIntegritySnapshot (line 37) | pub struct TorrentIntegritySnapshot { type ProbeBatchRequest (line 48) | pub struct ProbeBatchRequest { type ProbeBatchOutcome (line 56) | pub enum ProbeBatchOutcome { type IntegrityTorrentState (line 63) | struct IntegrityTorrentState { method new (line 82) | fn new(now: Instant) -> Self { method priority_class (line 102) | fn priority_class(&self) -> IntegrityPriorityClass { method schedule_next_full_probe (line 112) | fn schedule_next_full_probe(&mut self, now: Instant) { method healthy_retry_interval (line 122) | fn healthy_retry_interval(&self) -> Duration { method expected_healthy_interval (line 135) | fn expected_healthy_interval(&self) -> Option { method healthy_deadline_mismatch (line 147) | fn healthy_deadline_mismatch(&self, now: Instant) -> Option<(Duration,... type IntegrityScheduler (line 163) | pub struct IntegrityScheduler { method new (line 170) | pub fn new(now: Instant) -> Self { method advance_time (line 178) | pub fn advance_time(&mut self, dt: Duration) { method sync_torrents (line 182) | pub fn sync_torrents(&mut self, snapshots: I) method remove_torrent (line 221) | pub fn remove_torrent(&mut self, info_hash: &[u8]) { method next_probe_in (line 230) | pub fn next_probe_in(&self, info_hash: &[u8]) -> Option { method on_metadata_loaded (line 243) | pub fn on_metadata_loaded(&mut self, info_hash: &[u8]) { method on_data_availability_fault (line 252) | pub fn on_data_availability_fault(&mut self, info_hash: &[u8]) { method drain_due_probe_requests (line 282) | pub fn drain_due_probe_requests(&mut self) -> Vec { method reclaim_timed_out_probe_batches (line 315) | fn reclaim_timed_out_probe_batches(&mut self) { method pick_next_due_torrent (line 337) | fn pick_next_due_torrent(&self) -> Option> { method on_dispatch_failed (line 355) | pub fn on_dispatch_failed(&mut self, info_hash: &[u8]) { method on_probe_batch_result (line 365) | pub fn on_probe_batch_result( function priority_rank (line 417) | fn priority_rank(priority: IntegrityPriorityClass) -> u8 { function snapshot (line 430) | fn snapshot( function downloading_snapshot (line 449) | fn downloading_snapshot( function missing_entry (line 466) | fn missing_entry(name: &str) -> FileProbeEntry { function scheduler_prioritizes_recovery_before_healthy (line 480) | fn scheduler_prioritizes_recovery_before_healthy() { function partial_batch_keeps_sweep_in_progress (line 496) | fn partial_batch_keeps_sweep_in_progress() { function completed_healthy_sweep_waits_for_retry_interval (line 530) | fn completed_healthy_sweep_waits_for_retry_interval() { function healthy_probes_are_suppressed_while_torrent_is_still_downloading (line 568) | fn healthy_probes_are_suppressed_while_torrent_is_still_downloading() { function downloading_torrent_still_probes_immediately_after_data_fault (line 583) | fn downloading_torrent_still_probes_immediately_after_data_fault() { function synthetic_million_file_sweep_makes_forward_progress (line 606) | fn synthetic_million_file_sweep_makes_forward_progress() { function data_fault_schedules_same_saved_location_immediately (line 660) | fn data_fault_schedules_same_saved_location_immediately() { function data_fault_does_not_schedule_other_torrents_with_only_shared_root (line 719) | fn data_fault_does_not_schedule_other_torrents_with_only_shared_root() { function stale_batch_result_is_ignored_after_fault_epoch_bump (line 769) | fn stale_batch_result_is_ignored_after_fault_epoch_bump() { function timed_out_probe_batch_is_reclaimed_and_reissued_from_start (line 812) | fn timed_out_probe_batch_is_reclaimed_and_reissued_from_start() { function stale_batch_result_is_ignored_after_timeout_epoch_bump (line 847) | fn stale_batch_result_is_ignored_after_timeout_epoch_bump() { function small_manifest_healthy_sweep_retries_after_sixty_seconds (line 906) | fn small_manifest_healthy_sweep_retries_after_sixty_seconds() { function large_active_manifest_keeps_standard_healthy_retry_interval (line 950) | fn large_active_manifest_keeps_standard_healthy_retry_interval() { function healthy_deadline_mismatch_detects_small_manifest_on_long_deadline (line 994) | fn healthy_deadline_mismatch_detects_small_manifest_on_long_deadline() { function healthy_deadline_mismatch_detects_shorter_deadlines_and_ignores_matching (line 1012) | fn healthy_deadline_mismatch_detects_shorter_deadlines_and_ignores_match... function sync_torrents_shortens_stale_healthy_deadline_to_small_manifest_policy (line 1032) | fn sync_torrents_shortens_stale_healthy_deadline_to_small_manifest_polic... function sync_torrents_extends_stale_healthy_deadline_to_idle_policy (line 1059) | fn sync_torrents_extends_stale_healthy_deadline_to_idle_policy() { FILE: src/logging.rs constant DEFAULT_BUFFERED_LINES (line 12) | const DEFAULT_BUFFERED_LINES: usize = 128_000; constant LOG_FILE_SUFFIX (line 13) | const LOG_FILE_SUFFIX: &str = "log"; type LogWorkerGuard (line 15) | pub(crate) struct LogWorkerGuard { method drop (line 21) | fn drop(&mut self) { type NonBlockingLogWriter (line 32) | pub(crate) struct NonBlockingLogWriter { type Writer (line 73) | type Writer = NonBlockingLogWriter; method make_writer (line 75) | fn make_writer(&'a self) -> Self::Writer { method write (line 37) | fn write(&mut self, buf: &[u8]) -> io::Result { method flush (line 51) | fn flush(&mut self) -> io::Result<()> { type LogCommand (line 80) | enum LogCommand { type LogDateProvider (line 86) | trait LogDateProvider: Send { method current_date (line 87) | fn current_date(&self) -> NaiveDate; method current_date (line 93) | fn current_date(&self) -> NaiveDate { method current_date (line 358) | fn current_date(&self) -> NaiveDate { type UtcDateProvider (line 90) | struct UtcDateProvider; type DailyRollingFileWriter (line 98) | struct DailyRollingFileWriter { method new (line 109) | fn new( method write_all (line 128) | fn write_all(&mut self, buf: &[u8]) -> io::Result<()> { method flush (line 137) | fn flush(&mut self) -> io::Result<()> { method roll_if_needed (line 144) | fn roll_if_needed(&mut self) -> io::Result<()> { method prune_old_logs (line 175) | fn prune_old_logs(&self) { function non_blocking_daily_file_writer (line 195) | pub(crate) fn non_blocking_daily_file_writer( function non_blocking_daily_file_writer_with_date_provider (line 209) | fn non_blocking_daily_file_writer_with_date_provider( function run_log_worker (line 239) | fn run_log_worker(mut file_writer: DailyRollingFileWriter, receiver: Rec... function report_log_worker_error (line 261) | fn report_log_worker_error(reported: &mut bool, error: io::Error) { function daily_log_file_name (line 271) | fn daily_log_file_name(filename_prefix: &str, date: NaiveDate) -> String { function matching_log_files (line 280) | fn matching_log_files( function prune_old_logs (line 313) | fn prune_old_logs( type SharedDateProvider (line 353) | struct SharedDateProvider { function date (line 363) | fn date(year: i32, month: u32, day: u32) -> NaiveDate { function daily_log_file_name_matches_existing_format (line 368) | fn daily_log_file_name_matches_existing_format() { function non_blocking_writer_flushes_on_guard_drop (line 380) | fn non_blocking_writer_flushes_on_guard_drop() { function daily_writer_rolls_to_next_date (line 397) | fn daily_writer_rolls_to_next_date() { function retention_prunes_only_old_matching_logs (line 427) | fn retention_prunes_only_old_matching_logs() { function retention_delete_failures_do_not_fail_pruning (line 472) | fn retention_delete_failures_do_not_fail_pruning() { function rollover_open_failure_keeps_previous_file (line 496) | fn rollover_open_failure_keeps_previous_file() { function full_queue_drops_without_write_error (line 537) | fn full_queue_drops_without_write_error() { function full_queue_flush_reports_would_block (line 547) | fn full_queue_flush_reports_would_block() { function log_writer_reports_open_failure (line 559) | fn log_writer_reports_open_failure() { FILE: src/main.rs constant DEFAULT_LOG_FILTER (line 100) | const DEFAULT_LOG_FILTER: LevelFilter = LevelFilter::INFO; type OutputMode (line 103) | enum OutputMode { type ShowConfigsSnapshot (line 109) | struct ShowConfigsSnapshot { type HostIdentitySnapshot (line 122) | struct HostIdentitySnapshot { type LauncherPathsSnapshot (line 129) | struct LauncherPathsSnapshot { type LocalPathsSnapshot (line 135) | struct LocalPathsSnapshot { type EffectiveConfigFilesSnapshot (line 152) | struct EffectiveConfigFilesSnapshot { type EffectivePathsSnapshot (line 160) | struct EffectivePathsSnapshot { type SharedPathsSnapshot (line 178) | struct SharedPathsSnapshot { type SettingsPathSnapshot (line 201) | struct SettingsPathSnapshot { type ShowConfigsDescription (line 209) | struct ShowConfigsDescription { constant SHOW_CONFIG_DESCRIPTIONS (line 216) | const SHOW_CONFIG_DESCRIPTIONS: &[ShowConfigsDescription] = &[ function init_tracing (line 581) | fn init_tracing( function already_running_message (line 672) | fn already_running_message() -> &'static str { function private_client_leak_guard_message (line 677) | fn private_client_leak_guard_message(config_path: &str) -> String { function main (line 684) | async fn main() -> Result<(), Box> { function get_lock_path (line 961) | fn get_lock_path() -> Option { function try_acquire_app_lock (line 975) | fn try_acquire_app_lock() -> io::Result> { function process_launcher_setup_command (line 987) | fn process_launcher_setup_command(cli: &Cli, output_mode: OutputMode) ->... function shared_config_selection_json (line 1004) | fn shared_config_selection_json(selection: &crate::config::SharedConfigS... function optional_path_json (line 1012) | fn optional_path_json(path: Option) -> Value { function print_optional_sidecar_path (line 1019) | fn print_optional_sidecar_path(sidecar_path: Option<&PathBuf>) { function process_set_shared_config_command (line 1026) | fn process_set_shared_config_command( function process_clear_shared_config_command (line 1048) | fn process_clear_shared_config_command(output_mode: OutputMode) -> io::R... function process_show_shared_config_command (line 1069) | fn process_show_shared_config_command(output_mode: OutputMode) -> io::Re... function process_show_configs_command (line 1120) | fn process_show_configs_command( function build_show_configs_snapshot (line 1144) | fn build_show_configs_snapshot( function absolute_path (line 1368) | fn absolute_path(path: PathBuf) -> io::Result { function absolute_path_opt (line 1372) | fn absolute_path_opt(path: Option) -> io::Result) -> io::Result> { function push_unique_report_path (line 1380) | fn push_unique_report_path(paths: &mut Vec, path: Option Vec { function show_config_description (line 1392) | fn show_config_description(section: &str, key: &str) -> &'static str { function show_configs_json_data (line 1400) | fn show_configs_json_data(snapshot: &ShowConfigsSnapshot, show_all: bool... function show_configs_effective_descriptions (line 1415) | fn show_configs_effective_descriptions() -> Vec { function print_show_configs_text (line 1428) | fn print_show_configs_text(snapshot: &ShowConfigsSnapshot, show_all: boo... function print_path_line (line 1800) | fn print_path_line(section: &str, key: &str, label: &str, path: Option<&... function print_value_line (line 1808) | fn print_value_line(section: &str, key: &str, label: &str, value: &str) { function print_described_line (line 1812) | fn print_described_line(label: &str, value: &str, description: &str) { function print_path_list (line 1820) | fn print_path_list(section: &str, key: &str, label: &str, paths: &[PathB... function print_show_configs_effective (line 1837) | fn print_show_configs_effective(snapshot: &ShowConfigsSnapshot) { function print_show_configs_settings (line 1947) | fn print_show_configs_settings(snapshot: &ShowConfigsSnapshot) { function shared_config_source_label (line 1989) | fn shared_config_source_label(source: SharedConfigSource) -> &'static str { function host_id_source_label (line 1996) | fn host_id_source_label(source: HostIdSource) -> &'static str { function process_set_host_id_command (line 2006) | fn process_set_host_id_command(host_id: &str, output_mode: OutputMode) -... function process_clear_host_id_command (line 2021) | fn process_clear_host_id_command(output_mode: OutputMode) -> io::Result<... function process_show_host_id_command (line 2041) | fn process_show_host_id_command(output_mode: OutputMode) -> io::Result<(... function process_to_shared_command (line 2077) | fn process_to_shared_command(path: &std::path::Path, output_mode: Output... function process_to_standalone_command (line 2093) | fn process_to_standalone_command(output_mode: OutputMode) -> io::Result<... function process_cli_request (line 2104) | fn process_cli_request( function resolve_cli_command_sink (line 2263) | fn resolve_cli_command_sink(settings: &Settings) -> io::Result { function queue_direct_input_command (line 2272) | fn queue_direct_input_command(settings: &Settings, input: &str) -> io::R... function queue_runtime_stop_command (line 2292) | fn queue_runtime_stop_command(settings: &Settings) -> io::Result { function queue_control_request_command (line 2297) | fn queue_control_request_command( function print_queued_control_message (line 2305) | fn print_queued_control_message( function process_shared_status_request (line 2337) | fn process_shared_status_request( function process_online_status_request (line 2376) | fn process_online_status_request( function process_online_control_request (line 2434) | fn process_online_control_request( function process_shared_control_request (line 2449) | fn process_shared_control_request( function process_offline_control_request (line 2460) | fn process_offline_control_request( function process_files_command (line 2502) | fn process_files_command( type CatalogRecoveryStatus (line 2542) | enum CatalogRecoveryStatus { method as_str (line 2551) | fn as_str(&self) -> &'static str { type CatalogRecoveryCandidate (line 2563) | struct CatalogRecoveryCandidate { function catalog_info_hashes (line 2573) | fn catalog_info_hashes(settings: &Settings) -> HashSet { function processed_source_candidates (line 2582) | fn processed_source_candidates(source_path: &Path) -> Vec { function recover_source_from_journal_entry (line 2600) | fn recover_source_from_journal_entry(entry: &EventJournalEntry) -> Optio... function recovered_source_info_hash (line 2644) | fn recovered_source_info_hash(source: &str, recovered_path: &Path) -> Op... function ingest_payload_path (line 2654) | fn ingest_payload_path(entry: &EventJournalEntry) -> Option { function recovered_validation_status (line 2661) | fn recovered_validation_status(entry: &EventJournalEntry) -> bool { function analyze_catalog_recovery (line 2667) | fn analyze_catalog_recovery( function print_catalog_recovery_report (line 2742) | fn print_catalog_recovery_report(candidates: &[CatalogRecoveryCandidate]... function process_journal_command (line 2802) | fn process_journal_command( function process_torrents_command (line 2860) | fn process_torrents_command(settings: &Settings, output_mode: OutputMode... function process_info_command (line 2896) | fn process_info_command( function print_torrent_details (line 2926) | fn print_torrent_details(settings: &Settings, torrent: &crate::config::T... function format_event_details (line 2960) | fn format_event_details(details: &crate::persistence::event_journal::Eve... function torrent_details_value (line 3022) | fn torrent_details_value(settings: &Settings, torrent: &crate::config::T... function cli_command_name (line 3046) | fn cli_command_name(command: Option<&Commands>) -> Option<&'static str> { function print_success (line 3077) | fn print_success(output_mode: OutputMode, command: &str, message: &str, ... function print_json_error (line 3094) | fn print_json_error(command: Option<&str>, error: &str) { function print_json_passthrough (line 3106) | fn print_json_passthrough( function record_offline_control_journal_entry (line 3133) | fn record_offline_control_journal_entry(request: &ControlRequest, result... function cleanup_terminal (line 3161) | fn cleanup_terminal() -> Result<(), Box> { function generate_client_id_string (line 3175) | fn generate_client_id_string() -> String { function shared_env_guard (line 3198) | fn shared_env_guard() -> &'static std::sync::Mutex<()> { type EnvVarRestore (line 3203) | struct EnvVarRestore { method capture (line 3209) | fn capture(key: &'static str) -> Self { method drop (line 3218) | fn drop(&mut self) { type AppPathsRestore (line 3226) | struct AppPathsRestore; method drop (line 3229) | fn drop(&mut self) { function set_test_app_paths (line 3235) | fn set_test_app_paths(root: &Path) -> AppPathsRestore { function assert_abs_opt (line 3243) | fn assert_abs_opt(path: &Option, label: &str) { function sample_settings (line 3250) | fn sample_settings() -> Settings { function write_sample_torrent_file (line 3262) | fn write_sample_torrent_file() -> (tempfile::TempDir, String) { function write_recovery_torrent_file (line 3296) | fn write_recovery_torrent_file(file_name: &str) -> (tempfile::TempDir, P... function ingest_added_entry (line 3322) | fn ingest_added_entry( function offline_pause_updates_torrent_control_state (line 3346) | fn offline_pause_updates_torrent_control_state() { function already_running_message_matches_terminal_text (line 3362) | fn already_running_message_matches_terminal_text() { function private_client_leak_guard_message_includes_recovery_steps (line 3368) | fn private_client_leak_guard_message_includes_recovery_steps() { function offline_delete_removes_matching_torrent (line 3378) | fn offline_delete_removes_matching_torrent() { function catalog_recovery_validates_torrent_file_contents_for_normal_filename (line 3392) | fn catalog_recovery_validates_torrent_file_contents_for_normal_filename() { function catalog_recovery_validates_path_file_by_referenced_torrent_contents (line 3412) | fn catalog_recovery_validates_path_file_by_referenced_torrent_contents() { function offline_resume_updates_torrent_control_state (line 3434) | fn offline_resume_updates_torrent_control_state() { function offline_priority_updates_file_priority_by_index (line 3451) | fn offline_priority_updates_file_priority_by_index() { function offline_priority_updates_file_priority_by_relative_path (line 3477) | fn offline_priority_updates_file_priority_by_relative_path() { function shared_mode_without_running_leader_mutates_shared_settings_offline (line 3503) | fn shared_mode_without_running_leader_mutates_shared_settings_offline() { function optional_path_json_serializes_path_or_null (line 3591) | fn optional_path_json_serializes_path_or_null() { function show_configs_standalone_resolves_absolute_paths (line 3600) | fn show_configs_standalone_resolves_absolute_paths() { function show_configs_without_loaded_settings_keeps_path_report_available (line 3661) | fn show_configs_without_loaded_settings_keeps_path_report_available() { function show_configs_shared_mode_includes_shared_absolute_paths (line 3698) | fn show_configs_shared_mode_includes_shared_absolute_paths() { function shared_status_follow_start_returns_error_for_non_stream_requests (line 3755) | fn shared_status_follow_start_returns_error_for_non_stream_requests() { function shared_status_follow_stop_returns_error (line 3770) | fn shared_status_follow_stop_returns_error() { function shared_status_now_uses_offline_snapshot_when_no_leader_is_running (line 3785) | fn shared_status_now_uses_offline_snapshot_when_no_leader_is_running() { function shared_cli_acquires_shared_lock_when_no_leader_is_running (line 3828) | fn shared_cli_acquires_shared_lock_when_no_leader_is_running() { FILE: src/networking/protocol.rs type MessageGenerationError (line 27) | pub enum MessageGenerationError { method fmt (line 33) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { type ClientExtendedId (line 43) | pub enum ClientExtendedId { method id (line 51) | pub fn id(&self) -> u8 { method as_str (line 56) | pub fn as_str(&self) -> &'static str { type PexMessage (line 68) | pub struct PexMessage { type MetadataMessage (line 84) | pub struct MetadataMessage { type ExtendedHandshakePayload (line 98) | pub struct ExtendedHandshakePayload { type Message (line 109) | pub enum Message { type BlockInfo (line 132) | pub struct BlockInfo { function writer_task (line 138) | pub async fn writer_task( function reader_task (line 215) | pub async fn reader_task( function generate_message (line 282) | pub fn generate_message(message: Message) -> Result, MessageGene... function parse_message_from_bytes (line 435) | pub fn parse_message_from_bytes( function read_be_u32 (line 642) | fn read_be_u32(slice: &[u8], offset: usize) -> Result(stream: &mut R) -> Result Result<(), Box> { function run_message_test (line 751) | async fn run_message_test( function test_tcp_keep_alive (line 777) | async fn test_tcp_keep_alive() -> Result<(), Box> { function test_tcp_choke (line 782) | async fn test_tcp_choke() -> Result<(), Box> { function test_tcp_unchoke (line 787) | async fn test_tcp_unchoke() -> Result<(), Box> { function test_tcp_interested (line 792) | async fn test_tcp_interested() -> Result<(), Box> { function test_tcp_have (line 797) | async fn test_tcp_have() -> Result<(), Box> { function test_tcp_bitfield (line 802) | async fn test_tcp_bitfield() -> Result<(), Box> { function test_tcp_request (line 813) | async fn test_tcp_request() -> Result<(), Box> { function test_tcp_piece (line 823) | async fn test_tcp_piece() -> Result<(), Box> { function test_tcp_cancel (line 834) | async fn test_tcp_cancel() -> Result<(), Box> { function test_tcp_port (line 844) | async fn test_tcp_port() -> Result<(), Box> { function assert_message_roundtrip (line 850) | async fn assert_message_roundtrip(msg: Message) { function test_all_message_roundtrips (line 862) | async fn test_all_message_roundtrips() { function test_extended_handshake_parsing (line 879) | async fn test_extended_handshake_parsing() { function test_pex_message_roundtrip_supports_ipv6_keys (line 904) | fn test_pex_message_roundtrip_supports_ipv6_keys() { function test_pex_message_serializes_dropped_as_compact_bytes (line 949) | fn test_pex_message_serializes_dropped_as_compact_bytes() { function test_pex_message_serializes_flag_vectors_as_compact_bytes (line 967) | fn test_pex_message_serializes_flag_vectors_as_compact_bytes() { FILE: src/networking/session.rs constant PEER_BLOCK_IN_FLIGHT_LIMIT (line 46) | const PEER_BLOCK_IN_FLIGHT_LIMIT: usize = 8; constant MAX_WINDOW (line 47) | const MAX_WINDOW: usize = MAX_PIPELINE_DEPTH; constant PEER_FLOOD_WINDOW (line 48) | const PEER_FLOOD_WINDOW: Duration = Duration::from_secs(1); constant PEER_FLOOD_DISCONNECT_BUDGET_PER_WINDOW (line 49) | const PEER_FLOOD_DISCONNECT_BUDGET_PER_WINDOW: u32 = 131_072; type PeerFloodAction (line 52) | enum PeerFloodAction { type PeerFloodGate (line 58) | struct PeerFloodGate { method new (line 64) | fn new(now: Instant) -> Self { method check (line 71) | fn check(&mut self, now: Instant, cost: u32) -> PeerFloodAction { type DisconnectGuard (line 91) | struct DisconnectGuard { method drop (line 97) | fn drop(&mut self) { type AbortOnDrop (line 104) | struct AbortOnDrop(JoinHandle<()>); method drop (line 106) | fn drop(&mut self) { type ConnectionType (line 112) | pub enum ConnectionType { type PeerSessionParameters (line 117) | pub struct PeerSessionParameters { type PeerSession (line 130) | pub struct PeerSession { method new (line 179) | pub fn new(params: PeerSessionParameters) -> Self { method run (line 222) | pub async fn run( method process_manager_command (line 499) | fn process_manager_command( method incoming_peer_message_flood_action (line 665) | fn incoming_peer_message_flood_action(&mut self) -> PeerFloodAction { method dropped_peer_message_label (line 669) | fn dropped_peer_message_label(message: &Message) -> &'static str { method handle_pex (line 692) | fn handle_pex(&self, peers_list: Vec) { method peer_advertised_extension_id (line 733) | fn peer_advertised_extension_id(&self, extension: ClientExtendedId) ->... method peer_extension_id (line 740) | fn peer_extension_id(&self, extension: ClientExtendedId) -> Option { method handle_extended_message (line 752) | async fn handle_extended_message( method adjust_window_size (line 874) | fn adjust_window_size(&mut self) -> bool { method shrink_window (line 929) | fn shrink_window(&mut self) { method emit_window_event (line 953) | fn emit_window_event(&self, event: WindowAdaptationEvent) { method with_window_monitor (line 960) | pub fn with_window_monitor(mut self, monitor: Arc) -> Self { method with_window_events (line 966) | fn with_window_events( type WindowAdaptationEvent (line 172) | enum WindowAdaptationEvent { function parse_message (line 987) | async fn parse_message(stream: &mut R) -> Result ( function spawn_test_session_with_window_events (line 1022) | async fn spawn_test_session_with_window_events() -> ( function build_session_for_extended_message_tests (line 1073) | fn build_session_for_extended_message_tests() -> (PeerSession, mpsc::Rec... type WindowDriveHarness (line 1095) | struct WindowDriveHarness<'a> { function drive_until (line 1104) | async fn drive_until( function perform_handshake (line 1146) | async fn perform_handshake(network: &mut tokio::io::DuplexStream) { function metadata_request_uses_peer_advertised_extension_id (line 1157) | async fn metadata_request_uses_peer_advertised_extension_id() { function metadata_extension_id_zero_is_ignored (line 1195) | async fn metadata_extension_id_zero_is_ignored() { function metadata_piece_on_peer_advertised_extension_id_is_accepted (line 1234) | async fn metadata_piece_on_peer_advertised_extension_id_is_accepted() { function test_pipeline_saturation_with_virtual_time (line 1286) | async fn test_pipeline_saturation_with_virtual_time() { function test_fragmented_pipeline_saturation (line 1359) | async fn test_fragmented_pipeline_saturation() { function test_requests_continue_after_cancels (line 1412) | async fn test_requests_continue_after_cancels() { function test_peer_flood_gate_resets_after_window_rollover (line 1489) | fn test_peer_flood_gate_resets_after_window_rollover() { function test_peer_flood_gate_disconnects_after_disconnect_budget (line 1504) | fn test_peer_flood_gate_disconnects_after_disconnect_budget() { function test_performance_1000_blocks_sliding_window (line 1516) | async fn test_performance_1000_blocks_sliding_window() { function test_bug_repro_unsolicited_forwarding (line 1638) | async fn test_bug_repro_unsolicited_forwarding() { function spawn_debug_session (line 1695) | async fn spawn_debug_session() -> ( function test_heavy_load_20k_blocks_sliding_window (line 1738) | async fn test_heavy_load_20k_blocks_sliding_window() { function test_dynamic_window_growth_to_max (line 1895) | async fn test_dynamic_window_growth_to_max() { function test_dynamic_window_congestion_control (line 1976) | async fn test_dynamic_window_congestion_control() { function test_dynamic_window_steady_state (line 2094) | async fn test_dynamic_window_steady_state() { function test_dynamic_window_reset_on_choke (line 2168) | async fn test_dynamic_window_reset_on_choke() { FILE: src/networking/web_seed_worker.rs function web_seed_worker (line 10) | pub async fn web_seed_worker( FILE: src/persistence/activity_history.rs constant ACTIVITY_HISTORY_SCHEMA_VERSION (line 16) | pub const ACTIVITY_HISTORY_SCHEMA_VERSION: u32 = 1; constant ACTIVITY_HISTORY_FILE_NAME (line 17) | const ACTIVITY_HISTORY_FILE_NAME: &str = "activity_history.bin"; constant ACTIVITY_HISTORY_MAGIC (line 18) | const ACTIVITY_HISTORY_MAGIC: &[u8; 8] = b"SSAHBIN1"; constant MAX_ACTIVITY_HISTORY_TORRENTS (line 19) | const MAX_ACTIVITY_HISTORY_TORRENTS: usize = 100_000; type ActivityHistoryPoint (line 23) | pub struct ActivityHistoryPoint { type ActivityHistoryTiers (line 31) | pub struct ActivityHistoryTiers { type PersistedRollupAccumulator (line 40) | pub struct PersistedRollupAccumulator { method from (line 107) | fn from(accumulator: &RollupAccumulator) -> Self { type ActivityHistoryRollupSnapshot (line 48) | pub struct ActivityHistoryRollupSnapshot { type ActivityHistorySeries (line 56) | pub struct ActivityHistorySeries { type ActivityHistoryPersistedState (line 63) | pub struct ActivityHistoryPersistedState { method default (line 74) | fn default() -> Self { type RollupAccumulator (line 88) | struct RollupAccumulator { method push (line 95) | fn push(&mut self, point: &ActivityHistoryPoint) { method clear (line 101) | fn clear(&mut self) { method from (line 117) | fn from(accumulator: &PersistedRollupAccumulator) -> Self { type ActivityHistorySeriesRollupState (line 127) | pub struct ActivityHistorySeriesRollupState { method to_snapshot (line 134) | pub fn to_snapshot(&self) -> ActivityHistoryRollupSnapshot { method from_snapshot (line 142) | pub fn from_snapshot(snapshot: &ActivityHistoryRollupSnapshot) -> Self { method ingest_second_sample (line 150) | pub fn ingest_second_sample( type ActivityHistoryRollupState (line 202) | pub struct ActivityHistoryRollupState { method from_persisted (line 211) | pub fn from_persisted(state: &ActivityHistoryPersistedState) -> Self { method sync_snapshots_to_state (line 231) | pub fn sync_snapshots_to_state(&self, state: &mut ActivityHistoryPersi... function make_rollup_point (line 244) | fn make_rollup_point(acc: &RollupAccumulator, ts_unix: u64) -> ActivityH... function cap_vec (line 258) | fn cap_vec(vec: &mut Vec, cap: usize) { function enforce_retention_caps (line 265) | pub fn enforce_retention_caps(state: &mut ActivityHistoryPersistedState) { function retain_only_torrent_series_for_keys (line 275) | pub fn retain_only_torrent_series_for_keys( function cap_series (line 284) | fn cap_series(series: &mut ActivityHistorySeries) { function is_zero_point (line 291) | pub fn is_zero_point(point: &ActivityHistoryPoint) -> bool { function sparse_points_for_persistence (line 295) | fn sparse_points_for_persistence(points: &[ActivityHistoryPoint]) -> Vec... function sparse_series_for_persistence (line 303) | fn sparse_series_for_persistence(series: &ActivityHistorySeries) -> Acti... function sparse_state_for_persistence (line 315) | fn sparse_state_for_persistence( function has_any_point (line 338) | fn has_any_point(series: &ActivityHistorySeries) -> bool { function activity_history_state_file_path (line 345) | pub fn activity_history_state_file_path() -> io::Result { function load_activity_history_state (line 355) | pub fn load_activity_history_state() -> ActivityHistoryPersistedState { function save_activity_history_state (line 369) | pub fn save_activity_history_state(state: &ActivityHistoryPersistedState... function encode_u16 (line 374) | fn encode_u16(buf: &mut Vec, value: u16) { function encode_u32 (line 378) | fn encode_u32(buf: &mut Vec, value: u32) { function encode_u64 (line 382) | fn encode_u64(buf: &mut Vec, value: u64) { function encode_u128 (line 386) | fn encode_u128(buf: &mut Vec, value: u128) { function decode_u16 (line 390) | fn decode_u16(cursor: &mut Cursor<&[u8]>) -> io::Result { function decode_u32 (line 396) | fn decode_u32(cursor: &mut Cursor<&[u8]>) -> io::Result { function decode_u64 (line 402) | fn decode_u64(cursor: &mut Cursor<&[u8]>) -> io::Result { function decode_u128 (line 408) | fn decode_u128(cursor: &mut Cursor<&[u8]>) -> io::Result { function encode_rollup_accumulator (line 414) | fn encode_rollup_accumulator(buf: &mut Vec, accumulator: &PersistedR... function decode_rollup_accumulator (line 420) | fn decode_rollup_accumulator(cursor: &mut Cursor<&[u8]>) -> io::Result, points: &[ActivityHistoryPoint]) { function decode_points (line 437) | fn decode_points( function encode_series (line 461) | fn encode_series(buf: &mut Vec, series: &ActivityHistorySeries) { function decode_series (line 471) | fn decode_series(cursor: &mut Cursor<&[u8]>) -> io::Result, value: &str) { function decode_string (line 493) | fn decode_string(cursor: &mut Cursor<&[u8]>) -> io::Result { function encode_activity_history_state (line 500) | fn encode_activity_history_state(state: &ActivityHistoryPersistedState) ... function decode_activity_history_state (line 520) | fn decode_activity_history_state(bytes: &[u8]) -> io::Result ActivityHistory... function save_activity_history_state_to_path (line 609) | fn save_activity_history_state_to_path( function rollup_ingest_creates_minute_point_after_sixty_seconds (line 624) | fn rollup_ingest_creates_minute_point_after_sixty_seconds() { function save_then_load_round_trip (line 639) | fn save_then_load_round_trip() { function retain_only_torrent_series_prunes_absent_keys (line 676) | fn retain_only_torrent_series_prunes_absent_keys() { FILE: src/persistence/event_journal.rs constant EVENT_JOURNAL_FILE_NAME (line 14) | const EVENT_JOURNAL_FILE_NAME: &str = "event_journal.toml"; constant SHARED_EVENT_JOURNAL_FILE_NAME (line 15) | const SHARED_EVENT_JOURNAL_FILE_NAME: &str = "shared_event_journal.toml"; constant EVENT_JOURNAL_CAP (line 16) | pub const EVENT_JOURNAL_CAP: usize = 5_000; constant EVENT_JOURNAL_HEALTH_CAP (line 17) | pub const EVENT_JOURNAL_HEALTH_CAP: usize = 1_500; constant EVENT_JOURNAL_OPERATOR_CAP (line 18) | pub const EVENT_JOURNAL_OPERATOR_CAP: usize = EVENT_JOURNAL_CAP - EVENT_... type EventScope (line 22) | pub enum EventScope { type EventCategory (line 30) | pub enum EventCategory { type EventType (line 40) | pub enum EventType { type IngestOrigin (line 57) | pub enum IngestOrigin { type IngestKind (line 67) | pub enum IngestKind { type ControlOrigin (line 76) | pub enum ControlOrigin { type EventDetails (line 88) | pub enum EventDetails { type EventJournalEntry (line 117) | pub struct EventJournalEntry { type EventJournalState (line 135) | pub struct EventJournalState { function event_journal_state_file_path (line 140) | pub fn event_journal_state_file_path() -> io::Result { function shared_event_journal_state_file_path (line 151) | pub fn shared_event_journal_state_file_path() -> io::Result { function load_event_journal_state (line 164) | pub fn load_event_journal_state() -> EventJournalState { function save_event_journal_state (line 207) | pub fn save_event_journal_state(state: &EventJournalState) -> io::Result... function event_journal_json (line 237) | pub fn event_journal_json() -> io::Result { function enforce_event_journal_retention (line 241) | pub fn enforce_event_journal_retention(state: &mut EventJournalState) { function append_event_journal_entry (line 276) | pub fn append_event_journal_entry(state: &mut EventJournalState, mut ent... function load_event_journal_state_from_path (line 283) | fn load_event_journal_state_from_path(path: &Path) -> EventJournalState { function save_event_journal_state_to_path (line 316) | fn save_event_journal_state_to_path(state: &EventJournalState, path: &Pa... function load_missing_file_returns_default (line 334) | fn load_missing_file_returns_default() { function load_invalid_file_returns_default (line 343) | fn load_invalid_file_returns_default() { function save_then_load_round_trip (line 353) | fn save_then_load_round_trip() { function retention_prunes_oldest_entries (line 389) | fn retention_prunes_oldest_entries() { function append_entry_assigns_next_id_and_prunes (line 428) | fn append_entry_assigns_next_id_and_prunes() { function event_journal_json_serializes_current_state (line 460) | fn event_journal_json_serializes_current_state() { function shared_mode_saves_host_and_shared_entries_to_separate_files (line 468) | fn shared_mode_saves_host_and_shared_entries_to_separate_files() { FILE: src/persistence/network_history.rs constant NETWORK_HISTORY_SCHEMA_VERSION (line 12) | pub const NETWORK_HISTORY_SCHEMA_VERSION: u32 = 2; constant SECOND_1S_CAP (line 13) | pub const SECOND_1S_CAP: usize = 60 * 60; constant MINUTE_1M_CAP (line 14) | pub const MINUTE_1M_CAP: usize = 48 * 60; constant MINUTE_15M_CAP (line 15) | pub const MINUTE_15M_CAP: usize = 30 * 24 * 4; constant HOUR_1H_CAP (line 16) | pub const HOUR_1H_CAP: usize = 365 * 24; constant NETWORK_HISTORY_FILE_NAME (line 17) | const NETWORK_HISTORY_FILE_NAME: &str = "network_history.bin"; constant NETWORK_HISTORY_MAGIC (line 18) | const NETWORK_HISTORY_MAGIC: &[u8; 8] = b"SSNHBIN1"; type NetworkHistoryPoint (line 22) | pub struct NetworkHistoryPoint { type NetworkHistoryTiers (line 31) | pub struct NetworkHistoryTiers { type PersistedRollupAccumulator (line 40) | pub struct PersistedRollupAccumulator { method from (line 97) | fn from(accumulator: &RollupAccumulator) -> Self { type NetworkHistoryRollupSnapshot (line 49) | pub struct NetworkHistoryRollupSnapshot { type NetworkHistoryPersistedState (line 57) | pub struct NetworkHistoryPersistedState { method default (line 65) | fn default() -> Self { type RollupAccumulator (line 76) | struct RollupAccumulator { method push (line 84) | fn push(&mut self, point: &NetworkHistoryPoint) { method clear (line 91) | fn clear(&mut self) { method from (line 108) | fn from(accumulator: &PersistedRollupAccumulator) -> Self { type NetworkHistoryRollupState (line 119) | pub struct NetworkHistoryRollupState { method to_snapshot (line 126) | pub fn to_snapshot(&self) -> NetworkHistoryRollupSnapshot { method from_snapshot (line 134) | pub fn from_snapshot(snapshot: &NetworkHistoryRollupSnapshot) -> Self { method ingest_second_sample (line 142) | pub fn ingest_second_sample( function make_rollup_point (line 195) | fn make_rollup_point(acc: &RollupAccumulator, ts_unix: u64) -> NetworkHi... function cap_vec (line 210) | fn cap_vec(vec: &mut Vec, cap: usize) { function enforce_retention_caps (line 217) | pub fn enforce_retention_caps(state: &mut NetworkHistoryPersistedState) { function is_zero_point (line 224) | pub fn is_zero_point(point: &NetworkHistoryPoint) -> bool { function sparse_points_for_persistence (line 228) | fn sparse_points_for_persistence(points: &[NetworkHistoryPoint]) -> Vec<... function sparse_state_for_persistence (line 236) | pub fn sparse_state_for_persistence( function network_history_state_file_path (line 253) | pub fn network_history_state_file_path() -> io::Result { function load_network_history_state (line 265) | pub fn load_network_history_state() -> NetworkHistoryPersistedState { function save_network_history_state (line 280) | pub fn save_network_history_state(state: &NetworkHistoryPersistedState) ... function encode_u32 (line 285) | fn encode_u32(buf: &mut Vec, value: u32) { function encode_u64 (line 289) | fn encode_u64(buf: &mut Vec, value: u64) { function encode_u128 (line 293) | fn encode_u128(buf: &mut Vec, value: u128) { function decode_u32 (line 297) | fn decode_u32(cursor: &mut Cursor<&[u8]>) -> io::Result { function decode_u64 (line 303) | fn decode_u64(cursor: &mut Cursor<&[u8]>) -> io::Result { function decode_u128 (line 309) | fn decode_u128(cursor: &mut Cursor<&[u8]>) -> io::Result { function encode_rollup_accumulator (line 315) | fn encode_rollup_accumulator(buf: &mut Vec, accumulator: &PersistedR... function decode_rollup_accumulator (line 322) | fn decode_rollup_accumulator(cursor: &mut Cursor<&[u8]>) -> io::Result, points: &[NetworkHistoryPoint]) { function decode_points (line 341) | fn decode_points( function encode_network_history_state (line 364) | fn encode_network_history_state(state: &NetworkHistoryPersistedState) ->... function decode_network_history_state (line 389) | fn decode_network_history_state(bytes: &[u8]) -> io::Result NetworkHistoryPe... function save_network_history_state_to_path (line 468) | fn save_network_history_state_to_path( function load_missing_file_returns_default (line 483) | fn load_missing_file_returns_default() { function load_invalid_file_returns_default (line 492) | fn load_invalid_file_returns_default() { function save_then_load_round_trip (line 502) | fn save_then_load_round_trip() { function sparse_state_for_persistence_omits_zero_points (line 549) | fn sparse_state_for_persistence_omits_zero_points() { function zero_only_second_sample_does_not_mark_persistence_dirty (line 596) | fn zero_only_second_sample_does_not_mark_persistence_dirty() { function legacy_toml_file_is_ignored (line 607) | fn legacy_toml_file_is_ignored() { function retention_caps_trim_oldest_points (line 636) | fn retention_caps_trim_oldest_points() { function rollup_pipeline_emits_expected_aggregates (line 674) | fn rollup_pipeline_emits_expected_aggregates() { function rollup_snapshot_round_trip_restores_partial_accumulators (line 706) | fn rollup_snapshot_round_trip_restores_partial_accumulators() { function load_schema_v1_file_returns_default (line 734) | fn load_schema_v1_file_returns_default() { FILE: src/persistence/rss.rs type RssPersistedState (line 17) | pub struct RssPersistedState { function rss_state_file_path (line 24) | pub fn rss_state_file_path() -> io::Result { function load_rss_state (line 36) | pub fn load_rss_state() -> RssPersistedState { function save_rss_state (line 51) | pub fn save_rss_state(state: &RssPersistedState) -> io::Result<()> { function load_rss_state_from_path (line 56) | fn load_rss_state_from_path(path: &Path) -> RssPersistedState { function save_rss_state_to_path (line 86) | fn save_rss_state_to_path(state: &RssPersistedState, path: &Path) -> io:... function load_missing_file_returns_default (line 98) | fn load_missing_file_returns_default() { function load_invalid_file_returns_default (line 107) | fn load_invalid_file_returns_default() { function save_then_load_round_trip (line 117) | fn save_then_load_round_trip() { FILE: src/resource_manager.rs constant PERMIT_GRANT_BATCH_SIZE (line 10) | const PERMIT_GRANT_BATCH_SIZE: usize = 64; type PermitGuard (line 13) | pub struct PermitGuard { method drop (line 19) | fn drop(&mut self) { type ResourceType (line 27) | pub enum ResourceType { type ResourceManagerError (line 35) | pub enum ResourceManagerError { type ResourceManagerClient (line 43) | pub struct ResourceManagerClient { method acquire_peer_connection (line 64) | pub async fn acquire_peer_connection(&self) -> Result Result Result Result Result ResourceManagerSnapshot { method handle_acquire (line 244) | fn handle_acquire( method handle_release (line 265) | fn handle_release(&mut self, resource: ResourceType) { method handle_update_limits (line 273) | fn handle_update_limits(&mut self, limits: HashMap (tempfile::TempDir, MultiFileInfo) { function setup_multi_file (line 354) | fn setup_multi_file() -> (tempfile::TempDir, MultiFileInfo) { function setup_padding_file_scenario (line 380) | fn setup_padding_file_scenario() -> (tempfile::TempDir, MultiFileInfo) { function test_multi_file_info_new_single (line 417) | async fn test_multi_file_info_new_single() { function test_multi_file_info_new_multi (line 428) | async fn test_multi_file_info_new_multi() { function test_create_and_allocate_files_single (line 450) | async fn test_create_and_allocate_files_single() { function test_create_and_allocate_files_resizes_existing_short_file (line 461) | async fn test_create_and_allocate_files_resizes_existing_short_file() { function test_create_and_allocate_files_multi (line 474) | async fn test_create_and_allocate_files_multi() { function test_padding_files_logic (line 493) | async fn test_padding_files_logic() { function test_write_read_single_file (line 539) | async fn test_write_read_single_file() { function test_write_read_across_files (line 560) | async fn test_write_read_across_files() { function test_read_out_of_bounds (line 585) | async fn test_read_out_of_bounds() { function test_write_out_of_bounds (line 609) | async fn test_write_out_of_bounds() { function test_create_and_allocate_skips_skipped_files (line 638) | async fn test_create_and_allocate_skips_skipped_files() { function test_create_and_allocate_does_not_resize_existing_skipped_files (line 681) | async fn test_create_and_allocate_does_not_resize_existing_skipped_files... function test_read_skipped_missing_file_returns_zeros (line 706) | async fn test_read_skipped_missing_file_returns_zeros() { function test_read_skipped_existing_file_returns_data (line 739) | async fn test_read_skipped_existing_file_returns_data() { function test_write_skipped_missing_file_creates_it_lazily (line 774) | async fn test_write_skipped_missing_file_creates_it_lazily() { function test_mixed_priority_allocation_batch (line 814) | async fn test_mixed_priority_allocation_batch() { FILE: src/synthetic_load.rs constant BLOCK_SIZE (line 37) | const BLOCK_SIZE: u32 = 16_384; constant SYNTHETIC_BYTE (line 38) | const SYNTHETIC_BYTE: u8 = 0; constant MANAGER_CHANNEL_SIZE (line 39) | const MANAGER_CHANNEL_SIZE: usize = 10_000; constant EVENT_CHANNEL_SIZE (line 40) | const EVENT_CHANNEL_SIZE: usize = 100_000; constant CLIENT_ID (line 41) | const CLIENT_ID: &str = "SL000000000000000000"; constant LEECHER_REQUEST_BURST (line 42) | const LEECHER_REQUEST_BURST: usize = 16; constant ORCHESTRATION_IDLE_TICK (line 43) | const ORCHESTRATION_IDLE_TICK: Duration = Duration::from_millis(25); constant MAX_TORRENTS_PER_ORCHESTRATION_TICK (line 44) | const MAX_TORRENTS_PER_ORCHESTRATION_TICK: usize = 25; constant MAX_PEERS_PER_ORCHESTRATION_TICK (line 45) | const MAX_PEERS_PER_ORCHESTRATION_TICK: usize = 1_000; constant SYNTHETIC_PEERS_PER_INCOMING_HUB (line 46) | const SYNTHETIC_PEERS_PER_INCOMING_HUB: usize = 8_000; constant MAX_SYNTHETIC_INCOMING_HUBS (line 47) | const MAX_SYNTHETIC_INCOMING_HUBS: usize = 16; constant SYNTHETIC_LOCAL_PORT_BASE (line 49) | const SYNTHETIC_LOCAL_PORT_BASE: u16 = 10_000; constant SYNTHETIC_LOCAL_PORT_SPAN (line 51) | const SYNTHETIC_LOCAL_PORT_SPAN: usize = 30_000; constant BENCHMARK_INTERRUPT_ISSUE (line 52) | const BENCHMARK_INTERRUPT_ISSUE: &str = "interrupted by Ctrl+C"; type DynError (line 54) | type DynError = Box; type IncomingPeerTx (line 55) | type IncomingPeerTx = mpsc::Sender<(TcpStream, Vec)>; type IncomingRoutes (line 56) | type IncomingRoutes = Arc, IncomingPeerTx>>>; type SyntheticCounters (line 59) | struct SyntheticCounters { type HarnessContext (line 105) | struct HarnessContext { type SyntheticTorrentSpec (line 115) | struct SyntheticTorrentSpec { type ManagerRuntime (line 125) | struct ManagerRuntime { type SyntheticRunCleanup (line 131) | struct SyntheticRunCleanup { method new (line 142) | fn new( method cleanup (line 159) | async fn cleanup(&mut self) { method fail (line 180) | async fn fail(&mut self, error: impl Into) -> Result, tx: IncomingPeerTx) { method addr_for_peer (line 218) | fn addr_for_peer(&self, peer_index: usize) -> SocketAddr { type SyntheticSeederHub (line 224) | struct SyntheticSeederHub { method addr_for_peer (line 232) | fn addr_for_peer(&self, peer_index: usize) -> Result Self { method target_added (line 270) | fn target_added(self, elapsed: Duration, total_torrents: usize) -> usi... method scheduled_elapsed_for_index (line 284) | fn scheduled_elapsed_for_index(self, index: usize) -> Duration { function duration_mul (line 294) | fn duration_mul(duration: Duration, multiplier: usize) -> Duration { function expected_active_peers (line 299) | fn expected_active_peers( function peer_count_for_torrent (line 321) | fn peer_count_for_torrent(peers: usize, total_torrents: usize, torrent_i... type AddContext (line 328) | struct AddContext { method add_due_torrents (line 344) | async fn add_due_torrents( method add_until (line 356) | async fn add_until( method add_due_peers (line 414) | async fn add_due_peers( method active_peers (line 439) | fn active_peers(&self) -> usize { method progress (line 443) | fn progress(&self) -> OrchestrationProgress { type PeerRampRole (line 451) | enum PeerRampRole { type PeerRamp (line 462) | struct PeerRamp { method add_due_peers (line 471) | async fn add_due_peers( method active_peers (line 519) | fn active_peers(&self) -> usize { type SyntheticSample (line 525) | struct SyntheticSample { type SyntheticSummary (line 564) | struct SyntheticSummary { type BenchmarkSummary (line 616) | struct BenchmarkSummary { type BenchmarkReport (line 632) | struct BenchmarkReport { type BenchmarkScenarioReport (line 656) | struct BenchmarkScenarioReport { type BenchmarkProfileSummary (line 690) | struct BenchmarkProfileSummary { type BenchmarkProfileMetrics (line 704) | struct BenchmarkProfileMetrics { type BenchmarkStepSummary (line 745) | struct BenchmarkStepSummary { type BenchmarkEta (line 802) | struct BenchmarkEta { type BenchmarkStepTiming (line 812) | struct BenchmarkStepTiming { type BenchmarkAttemptContext (line 817) | struct BenchmarkAttemptContext { type OutboundConnectSample (line 826) | struct OutboundConnectSample { type ProtocolErrorSample (line 845) | struct ProtocolErrorSample { type BenchmarkStepPlan (line 860) | struct BenchmarkStepPlan { type BenchmarkRunProgress (line 871) | struct BenchmarkRunProgress { method new (line 878) | fn new(total_planned_steps: usize) -> Self { method record_step (line 886) | fn record_step( type ResourceSampleSet (line 922) | struct ResourceSampleSet { type ResourceSample (line 929) | struct ResourceSample { function run (line 936) | pub async fn run(args: &SyntheticLoadArgs, json_output: bool) -> Result<... function benchmark_interrupted (line 954) | fn benchmark_interrupted(interrupt_rx: &watch::Receiver) -> bool { function benchmark_interrupt_requested (line 958) | fn benchmark_interrupt_requested(interrupt_rx: Option<&watch::Receiver Result { type ParsedBenchmarkConfig (line 1493) | struct ParsedBenchmarkConfig { method from_args (line 1500) | fn from_args(args: &SyntheticBenchmarkArgs) -> Result { type SideSetup (line 1622) | struct SideSetup { type UploadStartContext (line 1628) | struct UploadStartContext<'a> { function start_download_torrent (line 1636) | async fn start_download_torrent( function start_upload_torrent (line 1678) | async fn start_upload_torrent( function build_manager (line 1721) | fn build_manager( function build_manager_with_incoming (line 1738) | fn build_manager_with_incoming( function build_manager_with_rx (line 1755) | fn build_manager_with_rx( function spawn_synthetic_seeder_hub (line 1797) | async fn spawn_synthetic_seeder_hub( function spawn_synthetic_seeder_accept_loop (line 1878) | fn spawn_synthetic_seeder_accept_loop( function synthetic_loopback_addr (line 1943) | fn synthetic_loopback_addr(peer_index: usize, port: u16) -> SocketAddr { function synthetic_single_listener_addr (line 1956) | fn synthetic_single_listener_addr(peer_index: usize, port: u16) -> Socke... function synthetic_listener_bind_addr (line 1969) | fn synthetic_listener_bind_addr() -> &'static str { function synthetic_local_addr (line 1982) | fn synthetic_local_addr(peer_index: usize) -> SocketAddr { function bind_synthetic_leecher_socket (line 1999) | fn bind_synthetic_leecher_socket(peer_index: usize) -> Result { function run_orchestrator (line 2329) | async fn run_orchestrator( function drain_orchestration_updates (line 2402) | fn drain_orchestration_updates( function wait_for_orchestrator (line 2427) | async fn wait_for_orchestrator( function sample_loop (line 2448) | async fn sample_loop( function shutdown_managers (line 2697) | async fn shutdown_managers(managers: &mut [ManagerRuntime]) { function collect_manager_events (line 2721) | async fn collect_manager_events( function topology_for (line 2835) | fn topology_for( function benchmark_step_plans (line 2876) | fn benchmark_step_plans( function benchmark_total_planned_steps (line 2924) | fn benchmark_total_planned_steps( function remaining_steps_in_current_scenario (line 2940) | fn remaining_steps_in_current_scenario(plan: &BenchmarkStepPlan) -> usize { function remaining_steps_after_issue (line 2944) | fn remaining_steps_after_issue(plan: &BenchmarkStepPlan) -> usize { function sleep_before_benchmark_retry (line 2948) | async fn sleep_before_benchmark_retry( function benchmark_synthetic_args (line 2963) | fn benchmark_synthetic_args( function benchmark_size_per_torrent (line 2995) | fn benchmark_size_per_torrent( function disk_side_multiplier (line 3022) | fn disk_side_multiplier(mode: SyntheticLoadMode) -> usize { function estimated_disk_bytes (line 3029) | fn estimated_disk_bytes(mode: SyntheticLoadMode, torrents: usize, size_p... function benchmark_step_peers (line 3035) | fn benchmark_step_peers( function benchmark_min_peers (line 3055) | fn benchmark_min_peers(mode: SyntheticLoadMode, torrents: usize) -> usize { function next_benchmark_step (line 3062) | fn next_benchmark_step( function benchmark_issues (line 3080) | fn benchmark_issues(summary: &SyntheticSummary, args: &SyntheticBenchmar... function benchmark_step_summary (line 3140) | fn benchmark_step_summary( function benchmark_failed_step_summary (line 3210) | fn benchmark_failed_step_summary( function benchmark_failed_profile_summary (line 3278) | fn benchmark_failed_profile_summary( function benchmark_profile_metrics (line 3333) | fn benchmark_profile_metrics(steps: &[BenchmarkStepSummary]) -> Benchmar... function add_protocol_error_sample (line 3452) | fn add_protocol_error_sample(total: &mut ProtocolErrorSample, sample: &P... function add_outbound_connect_sample (line 3488) | fn add_outbound_connect_sample(total: &mut OutboundConnectSample, sample... function benchmark_report (line 3518) | fn benchmark_report( function benchmark_scenario_report (line 3579) | fn benchmark_scenario_report( function benchmark_verdict (line 3642) | fn benchmark_verdict(profile: &BenchmarkProfileSummary) -> String { function benchmark_capacity_estimate (line 3662) | fn benchmark_capacity_estimate(profile: &BenchmarkProfileSummary) -> Str... function step_was_interrupted (line 3698) | fn step_was_interrupted(step: &BenchmarkStepSummary) -> bool { function likely_bottleneck (line 3704) | fn likely_bottleneck(profile: &BenchmarkProfileSummary) -> String { function effective_peer_connection_limit (line 3733) | fn effective_peer_connection_limit(peers: usize, configured: Option String { function os_limit_note (line 3744) | fn os_limit_note() -> String { function remove_run_data_dir (line 3752) | async fn remove_run_data_dir(output_dir: &Path) -> Result { function print_benchmark_report (line 3762) | fn print_benchmark_report(summary: &BenchmarkSummary, summary_path: &Pat... function print_interrupted_benchmark_report (line 3803) | fn print_interrupted_benchmark_report(summary: &BenchmarkSummary, summar... function print_benchmark_scenario_report (line 3833) | fn print_benchmark_scenario_report(scenario: &BenchmarkScenarioReport) { function human_benchmark_verdict (line 3874) | fn human_benchmark_verdict(verdict: &str) -> &'static str { function human_benchmark_torrent_capacity (line 3886) | fn human_benchmark_torrent_capacity(scenario: &BenchmarkScenarioReport) ... function human_benchmark_peer_capacity (line 3899) | fn human_benchmark_peer_capacity(scenario: &BenchmarkScenarioReport) -> ... function human_benchmark_issue_at (line 3912) | fn human_benchmark_issue_at(scenario: &BenchmarkScenarioReport) -> String { function print_benchmark_step_result (line 3920) | fn print_benchmark_step_result(step: &BenchmarkStepSummary) { function benchmark_eta_summary (line 3952) | fn benchmark_eta_summary(step: &BenchmarkStepSummary) -> String { function format_step_count (line 3980) | fn format_step_count(steps: usize) -> String { function benchmark_attempt_suffix (line 3988) | fn benchmark_attempt_suffix(step: &BenchmarkStepSummary) -> String { function benchmark_step_topology (line 3996) | fn benchmark_step_topology(step: &BenchmarkStepSummary) -> String { function benchmark_progress_count (line 4004) | fn benchmark_progress_count(added: usize, target: usize) -> String { function human_optional_count (line 4012) | fn human_optional_count(count: Option, singular: &str, plural: &s... function human_count (line 4018) | fn human_count(count: usize, singular: &str, plural: &str) -> String { function format_count (line 4023) | fn format_count(count: impl std::fmt::Display) -> String { function compact_issue_list (line 4035) | fn compact_issue_list(issues: &[String]) -> String { function truncate_issue (line 4052) | fn truncate_issue(issue: &str, max_chars: usize) -> String { function build_torrent_specs (line 4062) | fn build_torrent_specs( function prepare_seed_file (line 4116) | async fn prepare_seed_file( function full_bitfield (line 4132) | fn full_bitfield(piece_count: usize) -> Vec { function synthetic_peer_id (line 4142) | fn synthetic_peer_id(role: u8, index: usize) -> Vec { function take_frame (line 4150) | fn take_frame(buffer: &mut Vec) -> Option> { function frame_message_id (line 4161) | fn frame_message_id(frame: &[u8]) -> Option { function parse_request_payload (line 4169) | fn parse_request_payload(frame: &[u8]) -> Option<(u32, u32, u32)> { function parse_piece_payload_len (line 4179) | fn parse_piece_payload_len(frame: &[u8]) -> Option { function write_piece_frame (line 4186) | async fn write_piece_frame( function write_request_frame (line 4206) | async fn write_request_frame( function block_request_for (line 4225) | fn block_request_for(total_size: u64, piece_size: u64, block_index: u64)... type ManagerTotals (line 4238) | struct ManagerTotals { function manager_totals (line 4246) | fn manager_totals(managers: &[ManagerRuntime]) -> ManagerTotals { function outbound_connect_sample (line 4273) | fn outbound_connect_sample(counters: &SyntheticCounters) -> OutboundConn... function protocol_error_sample (line 4297) | fn protocol_error_sample(counters: &SyntheticCounters) -> ProtocolErrorS... function resource_samples (line 4323) | fn resource_samples(snapshot: ResourceManagerSnapshot) -> ResourceSample... function resource_sample (line 4331) | fn resource_sample(usage: Option<&ResourceUsage>) -> ResourceSample { function build_resource_manager_limits (line 4342) | fn build_resource_manager_limits( function parse_size (line 4364) | fn parse_size(raw: &str) -> Result { function gbps_to_bytes_per_second (line 4393) | fn gbps_to_bytes_per_second(gbps: f64) -> f64 { function bytes_to_bits_per_second (line 4401) | fn bytes_to_bits_per_second(bytes: u64, secs: f64) -> u64 { function bytes_per_second (line 4405) | fn bytes_per_second(bytes: u64, secs: f64) -> u64 { function format_bps (line 4409) | fn format_bps(bits_per_second: u64) -> String { function format_bytes (line 4422) | fn format_bytes(bytes: u64) -> String { function format_duration_secs (line 4435) | fn format_duration_secs(secs: f64) -> String { function mode_name (line 4457) | fn mode_name(mode: SyntheticLoadMode) -> &'static str { function add_mode_name (line 4465) | fn add_mode_name(mode: SyntheticLoadAddMode) -> &'static str { function peer_indices_for_torrent (line 4473) | fn peer_indices_for_torrent( function build_resource_manager (line 4481) | fn build_resource_manager( function staggered_add_plan_advances_by_burst_size (line 4494) | fn staggered_add_plan_advances_by_burst_size() { function peer_indices_partition_peers_across_torrents (line 4508) | fn peer_indices_partition_peers_across_torrents() { function expected_active_peers_tracks_staggered_torrent_and_peer_plans (line 4517) | fn expected_active_peers_tracks_staggered_torrent_and_peer_plans() { function expected_connection_close_filters_transport_teardown (line 4548) | fn expected_connection_close_filters_transport_teardown() { function benchmark_args (line 4563) | fn benchmark_args() -> SyntheticBenchmarkArgs { function benchmark_scenario_report_stub (line 4591) | fn benchmark_scenario_report_stub( function benchmark_capacity_helpers_report_explicit_clean_capacity (line 4632) | fn benchmark_capacity_helpers_report_explicit_clean_capacity() { function benchmark_capacity_helpers_explain_missing_clean_step (line 4644) | fn benchmark_capacity_helpers_explain_missing_clean_step() { function benchmark_progress_count_formats_partial_counts_without_abbreviations (line 4658) | fn benchmark_progress_count_formats_partial_counts_without_abbreviations... function benchmark_size_per_torrent_clamps_to_disk_budget (line 4664) | fn benchmark_size_per_torrent_clamps_to_disk_budget() { function benchmark_step_peers_enforces_swarm_peer_floor (line 4684) | fn benchmark_step_peers_enforces_swarm_peer_floor() { function next_benchmark_step_scales_torrents_before_peers (line 4697) | fn next_benchmark_step_scales_torrents_before_peers() { FILE: src/telemetry/activity_history_telemetry.rs type ActivityHistoryTelemetry (line 17) | pub struct ActivityHistoryTelemetry; method on_second_tick (line 20) | pub fn on_second_tick(app_state: &mut AppState) { method apply_loaded_state (line 100) | pub fn apply_loaded_state(app_state: &mut AppState, state: ActivityHis... method apply_loaded_state_at (line 104) | fn apply_loaded_state_at( function current_unix_time (line 121) | fn current_unix_time() -> u64 { function latest_second_timestamp (line 128) | fn latest_second_timestamp(series: &ActivityHistorySeries) -> u64 { function replay_live_seconds_into_loaded (line 137) | fn replay_live_seconds_into_loaded( function merge_state_for_late_restore (line 159) | fn merge_state_for_late_restore( function densify_tier_points (line 186) | fn densify_tier_points( function densify_series_for_restore (line 205) | fn densify_series_for_restore( function densify_state_for_restore (line 225) | fn densify_state_for_restore( function partial_accumulator (line 263) | fn partial_accumulator( function apply_loaded_state_replays_live_seconds_and_preserves_dirty (line 276) | fn apply_loaded_state_replays_live_seconds_and_preserves_dirty() { function merge_state_for_late_restore_replays_only_new_live_seconds (line 343) | fn merge_state_for_late_restore_replays_only_new_live_seconds() { function densify_state_for_restore_fills_sparse_second_gaps_and_tail_with_zeros (line 383) | fn densify_state_for_restore_fills_sparse_second_gaps_and_tail_with_zero... function densify_state_for_restore_fills_sparse_torrent_gaps_and_tail_with_zeros (line 410) | fn densify_state_for_restore_fills_sparse_torrent_gaps_and_tail_with_zer... function densify_tier_points_limits_sparse_tail_fill_to_retention_window (line 448) | fn densify_tier_points_limits_sparse_tail_fill_to_retention_window() { function apply_loaded_state_restores_dense_series_from_sparse_points (line 469) | fn apply_loaded_state_restores_dense_series_from_sparse_points() { function densify_state_for_restore_preserves_rollup_snapshot (line 509) | fn densify_state_for_restore_preserves_rollup_snapshot() { function apply_loaded_state_restores_second_to_minute_rollup_from_snapshot_without_parent_boundary (line 533) | fn apply_loaded_state_restores_second_to_minute_rollup_from_snapshot_wit... function apply_loaded_state_restores_minute_to_15m_rollup_from_snapshot_without_parent_boundary (line 575) | fn apply_loaded_state_restores_minute_to_15m_rollup_from_snapshot_withou... function apply_loaded_state_restores_15m_to_hour_rollup_from_snapshot_without_parent_boundary (line 620) | fn apply_loaded_state_restores_15m_to_hour_rollup_from_snapshot_without_... function second_tick_keeps_hidden_torrent_history_when_ui_filter_is_active (line 662) | fn second_tick_keeps_hidden_torrent_history_when_ui_filter_is_active() { FILE: src/telemetry/manager_telemetry.rs type ManagerTelemetry (line 8) | pub struct ManagerTelemetry { method should_emit (line 13) | pub fn should_emit(&mut self, metrics: &TorrentMetrics) -> bool { method normalized_for_compare (line 31) | fn normalized_for_compare(metrics: &TorrentMetrics) -> TorrentMetrics { function sample_metrics (line 45) | fn sample_metrics() -> TorrentMetrics { function emits_first_snapshot (line 65) | fn emits_first_snapshot() { function suppresses_identical_snapshot (line 72) | fn suppresses_identical_snapshot() { function ignores_countdown_only_drift (line 81) | fn ignores_countdown_only_drift() { function forces_emit_when_bytes_nonzero (line 93) | fn forces_emit_when_bytes_nonzero() { function emits_on_meaningful_change (line 104) | fn emits_on_meaningful_change() { FILE: src/telemetry/network_history_telemetry.rs type NetworkHistoryTelemetry (line 14) | pub struct NetworkHistoryTelemetry; method on_second_tick (line 17) | pub fn on_second_tick(app_state: &mut AppState) { method apply_loaded_state (line 37) | pub fn apply_loaded_state(app_state: &mut AppState, state: NetworkHist... method apply_loaded_state_at (line 41) | fn apply_loaded_state_at( function current_unix_time (line 100) | fn current_unix_time() -> u64 { function latest_point_timestamp (line 107) | fn latest_point_timestamp(points: &[NetworkHistoryPoint]) -> u64 { function merge_state_for_late_restore (line 111) | fn merge_state_for_late_restore( function densify_tier_points (line 141) | fn densify_tier_points( function densify_state_for_restore (line 160) | fn densify_state_for_restore( function partial_accumulator (line 197) | fn partial_accumulator( function apply_loaded_state_replays_live_seconds_and_preserves_dirty (line 212) | fn apply_loaded_state_replays_live_seconds_and_preserves_dirty() { function merge_state_for_late_restore_replays_only_new_live_seconds (line 274) | fn merge_state_for_late_restore_replays_only_new_live_seconds() { function densify_state_for_restore_fills_sparse_second_gaps_and_tail_with_zeros (line 313) | fn densify_state_for_restore_fills_sparse_second_gaps_and_tail_with_zero... function densify_state_for_restore_fills_sparse_minute_gaps_and_tail_with_zeros (line 341) | fn densify_state_for_restore_fills_sparse_minute_gaps_and_tail_with_zero... function densify_tier_points_limits_sparse_tail_fill_to_retention_window (line 369) | fn densify_tier_points_limits_sparse_tail_fill_to_retention_window() { function apply_loaded_state_restores_dense_histories_from_sparse_points (line 392) | fn apply_loaded_state_restores_dense_histories_from_sparse_points() { function densify_state_for_restore_preserves_rollup_snapshot (line 418) | fn densify_state_for_restore_preserves_rollup_snapshot() { function apply_loaded_state_restores_second_to_minute_rollup_from_snapshot_without_parent_boundary (line 441) | fn apply_loaded_state_restores_second_to_minute_rollup_from_snapshot_wit... function apply_loaded_state_restores_minute_to_15m_rollup_from_snapshot_without_parent_boundary (line 483) | fn apply_loaded_state_restores_minute_to_15m_rollup_from_snapshot_withou... function apply_loaded_state_restores_15m_to_hour_rollup_from_snapshot_without_parent_boundary (line 528) | fn apply_loaded_state_restores_15m_to_hour_rollup_from_snapshot_without_... FILE: src/telemetry/restore_densify.rs function densify_points_for_restore (line 4) | pub(crate) fn densify_points_for_restore( function densified_end_ts (line 71) | fn densified_end_ts(last_point_ts: u64, step_secs: u64, now_unix: u64) -... type TestPoint (line 85) | struct TestPoint { function densify_points_for_restore_fills_sparse_gaps_and_tail (line 91) | fn densify_points_for_restore_fills_sparse_gaps_and_tail() { function densify_points_for_restore_limits_fill_to_retention_window (line 117) | fn densify_points_for_restore_limits_fill_to_retention_window() { FILE: src/telemetry/ui_telemetry.rs constant SECONDS_HISTORY_MAX (line 12) | pub const SECONDS_HISTORY_MAX: usize = 3600; constant MINUTES_HISTORY_MAX (line 13) | pub const MINUTES_HISTORY_MAX: usize = 48 * 60; constant RECENT_FILE_ACTIVITY_RETENTION (line 14) | const RECENT_FILE_ACTIVITY_RETENTION: Duration = Duration::from_secs(120); constant RECEIVE_TO_WRITE_LATENCY_SAMPLES_MAX (line 15) | const RECEIVE_TO_WRITE_LATENCY_SAMPLES_MAX: usize = 1024; constant PENDING_WRITE_START_TIMES_MAX (line 16) | const PENDING_WRITE_START_TIMES_MAX: usize = 100_000; type UiTelemetry (line 18) | pub struct UiTelemetry; method on_manager_event_metrics (line 21) | pub fn on_manager_event_metrics(app_state: &mut AppState, event: &Mana... method on_metrics (line 159) | pub fn on_metrics(app_state: &mut AppState, message: TorrentMetrics) { method on_second_tick (line 249) | pub fn on_second_tick(app_state: &mut AppState, sys: &mut System) { function prune_stale_recent_file_activity (line 470) | fn prune_stale_recent_file_activity( function compute_disk_health_raw (line 490) | fn compute_disk_health_raw(app_state: &AppState) -> f64 { function compute_disk_state_score (line 520) | fn compute_disk_state_score(app_state: &AppState) -> f64 { function has_current_disk_health_signal (line 558) | fn has_current_disk_health_signal(app_state: &AppState) -> bool { function update_disk_health_state_level (line 566) | fn update_disk_health_state_level(app_state: &mut AppState) { function update_disk_health_state (line 581) | fn update_disk_health_state(app_state: &mut AppState) { function calculate_thrash_score (line 598) | fn calculate_thrash_score(history_log: &VecDeque) -> u64 { function calculate_duration_p95 (line 617) | fn calculate_duration_p95(samples: &VecDeque) -> Duration { function percentile_index_nearest_rank (line 629) | fn percentile_index_nearest_rank(len: usize, percentile: usize) -> Optio... function calculate_thrash_score_seek_cost_f64 (line 638) | fn calculate_thrash_score_seek_cost_f64(history_log: &VecDeque Vec { method deserialize (line 160) | fn deserialize(deserializer: D) -> Result method serialize (line 108) | fn serialize(&self, serializer: S) -> Result type ThemeResolution (line 255) | enum ThemeResolution { function parse_theme_name (line 264) | fn parse_theme_name(raw: &str) -> ThemeName { function resolve_theme_name (line 288) | fn resolve_theme_name(raw: &str) -> ThemeResolution { function normalize_theme_name_key (line 361) | fn normalize_theme_name_key(input: &str) -> String { type ThemeEffects (line 370) | pub struct ThemeEffects { method enabled (line 471) | pub fn enabled(&self) -> bool { type WaveMode (line 388) | pub enum WaveMode { type ParticleLayerMode (line 396) | pub enum ParticleLayerMode { method has_background (line 406) | pub fn has_background(self) -> bool { method has_foreground (line 410) | pub fn has_foreground(self) -> bool { type ParticleProfile (line 416) | pub enum ParticleProfile { type ThemeParticleEffect (line 426) | pub struct ThemeParticleEffect { method default (line 436) | fn default() -> Self { method default (line 449) | fn default() -> Self { type ThemeSemantic (line 477) | pub struct ThemeSemantic { type ThemeHeatmap (line 490) | pub struct ThemeHeatmap { type ThemeStream (line 498) | pub struct ThemeStream { type ThemeCategorical (line 504) | pub struct ThemeCategorical { type ThemeScale (line 522) | pub struct ThemeScale { type ThemeStateSlots (line 531) | pub struct ThemeStateSlots { type ThemeMetricSlots (line 541) | pub struct ThemeMetricSlots { type ThemePeerSlots (line 547) | pub struct ThemePeerSlots { type ThemeAccentSlots (line 554) | pub struct ThemeAccentSlots { type ThemeRoleSlots (line 563) | pub struct ThemeRoleSlots { function color_to_rgb (line 570) | pub fn color_to_rgb(color: Color) -> (u8, u8, u8) { function blend_colors (line 594) | pub fn blend_colors(c1: (u8, u8, u8), c2: (u8, u8, u8), ratio: f64) -> C... type ThemeContext (line 602) | pub struct ThemeContext { method new (line 608) | pub fn new(theme: Theme, frame_time: f64) -> Self { method apply (line 612) | pub fn apply(&self, style: Style) -> Style { method state_error (line 617) | pub fn state_error(&self) -> Color { method state_warning (line 621) | pub fn state_warning(&self) -> Color { method state_success (line 625) | pub fn state_success(&self) -> Color { method state_info (line 629) | pub fn state_info(&self) -> Color { method state_selected (line 633) | pub fn state_selected(&self) -> Color { method state_complete (line 637) | pub fn state_complete(&self) -> Color { method metric_download (line 641) | pub fn metric_download(&self) -> Color { method metric_upload (line 645) | pub fn metric_upload(&self) -> Color { method peer_discovered (line 649) | pub fn peer_discovered(&self) -> Color { method peer_connected (line 653) | pub fn peer_connected(&self) -> Color { method peer_disconnected (line 657) | pub fn peer_disconnected(&self) -> Color { method accent_sky (line 661) | pub fn accent_sky(&self) -> Color { method accent_teal (line 665) | pub fn accent_teal(&self) -> Color { method accent_peach (line 669) | pub fn accent_peach(&self) -> Color { method accent_sapphire (line 673) | pub fn accent_sapphire(&self) -> Color { method accent_maroon (line 677) | pub fn accent_maroon(&self) -> Color { method apply_effects_to_color_at (line 680) | pub fn apply_effects_to_color_at( type Theme (line 784) | pub struct Theme { method role_slots (line 792) | pub fn role_slots(&self) -> ThemeRoleSlots { method builtin (line 821) | pub fn builtin(name: ThemeName) -> Self { method catppuccin_mocha (line 867) | pub fn catppuccin_mocha() -> Self { method neon (line 926) | pub fn neon() -> Self { method bubblegum (line 994) | pub fn bubblegum() -> Self { method deep_ocean (line 1075) | pub fn deep_ocean() -> Self { method deep_sky (line 1142) | pub fn deep_sky() -> Self { method gold (line 1209) | pub fn gold() -> Self { method dracula (line 1283) | pub fn dracula() -> Self { method nord (line 1342) | pub fn nord() -> Self { method gruvbox_dark (line 1401) | pub fn gruvbox_dark() -> Self { method tokyo_night (line 1460) | pub fn tokyo_night() -> Self { method one_dark (line 1519) | pub fn one_dark() -> Self { method solarized_dark (line 1578) | pub fn solarized_dark() -> Self { method monokai (line 1637) | pub fn monokai() -> Self { method everforest_dark (line 1696) | pub fn everforest_dark() -> Self { method kanagawa (line 1755) | pub fn kanagawa() -> Self { method github_dark (line 1814) | pub fn github_dark() -> Self { method solarized_light (line 1873) | pub fn solarized_light() -> Self { method matrix (line 1932) | pub fn matrix() -> Self { method catppuccin_latte (line 2019) | pub fn catppuccin_latte() -> Self { method cyberpunk (line 2078) | pub fn cyberpunk() -> Self { method ayu_dark (line 2142) | pub fn ayu_dark() -> Self { method zenburn (line 2201) | pub fn zenburn() -> Self { method synthwave_84 (line 2260) | pub fn synthwave_84() -> Self { method github_light (line 2326) | pub fn github_light() -> Self { method vesper (line 2385) | pub fn vesper() -> Self { method material_ocean (line 2459) | pub fn material_ocean() -> Self { method gruvbox_light (line 2518) | pub fn gruvbox_light() -> Self { method oxocarbon (line 2577) | pub fn oxocarbon() -> Self { method rainbow (line 2636) | pub fn rainbow() -> Self { method inferno (line 2700) | pub fn inferno() -> Self { method aurora (line 2764) | pub fn aurora() -> Self { method andromeda (line 2833) | pub fn andromeda() -> Self { method rose_pine (line 2892) | pub fn rose_pine() -> Self { method nightfox (line 2951) | pub fn nightfox() -> Self { method papercolor_light (line 3010) | pub fn papercolor_light() -> Self { method black_hole (line 3069) | pub fn black_hole() -> Self { method obsidian_forge (line 3150) | pub fn obsidian_forge() -> Self { method arctic_whiteout (line 3219) | pub fn arctic_whiteout() -> Self { method diamond (line 3293) | pub fn diamond() -> Self { method bioluminescent_reef (line 3389) | pub fn bioluminescent_reef() -> Self { method sakura (line 3470) | pub fn sakura() -> Self { method default (line 3541) | fn default() -> Self { function categorical_ip_hash (line 3546) | fn categorical_ip_hash(categorical: ThemeCategorical) -> [Color; 14] { function all_theme_names (line 3569) | fn all_theme_names() -> Vec { function relative_luminance (line 3615) | fn relative_luminance(color: Color) -> f64 { function contrast_ratio (line 3631) | fn contrast_ratio(a: Color, b: Color) -> f64 { function color_distance (line 3638) | fn color_distance(a: Color, b: Color) -> f64 { function test_known_themes_snake_case (line 3648) | fn test_known_themes_snake_case() { function test_known_themes_display_format (line 3700) | fn test_known_themes_display_format() { function test_unknown_themes_default_to_catppuccin_mocha (line 3752) | fn test_unknown_themes_default_to_catppuccin_mocha() { function test_deprecated_theme_aliases_map_to_replacements (line 3776) | fn test_deprecated_theme_aliases_map_to_replacements() { function test_theme_deserialize_non_string_types_fallback_to_default (line 3795) | fn test_theme_deserialize_non_string_types_fallback_to_default() { function test_theme_name_normalization_accepts_case_and_delimiter_variants (line 3809) | fn test_theme_name_normalization_accepts_case_and_delimiter_variants() { function test_theme_default_is_catppuccin_mocha (line 3823) | fn test_theme_default_is_catppuccin_mocha() { function test_theme_name_roundtrip (line 3828) | fn test_theme_name_roundtrip() { function test_theme_semantic_readability_guards (line 3837) | fn test_theme_semantic_readability_guards() { function test_theme_status_colors_are_distinct (line 3869) | fn test_theme_status_colors_are_distinct() { function test_theme_effects_within_comfort_bounds (line 3896) | fn test_theme_effects_within_comfort_bounds() { function test_theme_effects_enabled_flag_tracks_presence_of_effects (line 3924) | fn test_theme_effects_enabled_flag_tracks_presence_of_effects() { function test_particle_themes_enable_particle_profiles (line 3939) | fn test_particle_themes_enable_particle_profiles() { function test_non_particle_theme_keeps_particle_effects_disabled (line 3989) | fn test_non_particle_theme_keeps_particle_effects_disabled() { FILE: src/token_bucket.rs function rate_limit_bps_to_bucket_bytes_per_sec (line 8) | pub fn rate_limit_bps_to_bucket_bytes_per_sec(limit_bps: u64) -> f64 { type TokenBucketInner (line 17) | struct TokenBucketInner { method refill (line 132) | fn refill(&mut self) { type TokenBucket (line 25) | pub struct TokenBucket { method new (line 33) | pub fn new(capacity: f64, fill_rate: f64) -> Self { method set_rate (line 58) | pub fn set_rate(&self, new_fill_rate: f64) { method set_rate_preserving_tokens (line 77) | pub fn set_rate_preserving_tokens(&self, new_fill_rate: f64) { method set_rate_with_capacity_preserving_tokens (line 81) | pub fn set_rate_with_capacity_preserving_tokens(&self, new_fill_rate: ... method get_tokens (line 102) | pub fn get_tokens(&self) -> f64 { method get_capacity (line 107) | pub fn get_capacity(&self) -> f64 { method set_tokens (line 112) | pub fn set_tokens(&self, val: f64) { method rewind_last_refill_time (line 117) | pub fn rewind_last_refill_time(&self, duration: Duration) { method get_fill_rate (line 126) | pub fn get_fill_rate(&self) -> f64 { function consume_tokens (line 150) | pub async fn consume_tokens(bucket: &TokenBucket, amount_tokens: f64) { constant TOLERANCE (line 207) | const TOLERANCE: f64 = 1e-3; constant TIMING_TOLERANCE (line 208) | const TIMING_TOLERANCE: f64 = 0.15; function test_token_bucket_new (line 211) | fn test_token_bucket_new() { function test_token_bucket_new_zero_rate (line 219) | fn test_token_bucket_new_zero_rate() { function test_token_bucket_consume_success_direct (line 228) | fn test_token_bucket_consume_success_direct() { function test_token_bucket_refill_direct (line 242) | async fn test_token_bucket_refill_direct() { function test_token_bucket_set_rate_direct (line 262) | fn test_token_bucket_set_rate_direct() { function test_token_bucket_set_rate_to_zero_direct (line 273) | fn test_token_bucket_set_rate_to_zero_direct() { function test_token_bucket_set_rate_preserving_tokens_does_not_refill_direct (line 284) | fn test_token_bucket_set_rate_preserving_tokens_does_not_refill_direct() { function test_token_bucket_set_rate_with_capacity_preserving_tokens_direct (line 295) | fn test_token_bucket_set_rate_with_capacity_preserving_tokens_direct() { function test_consume_tokens_unlimited_zero_rate_direct (line 306) | async fn test_consume_tokens_unlimited_zero_rate_direct() { function test_consume_tokens_immediate_success_direct (line 316) | async fn test_consume_tokens_immediate_success_direct() { function test_consume_tokens_waits_for_refill_direct (line 323) | async fn test_consume_tokens_waits_for_refill_direct() { function test_consume_tokens_multiple_consumers_direct (line 341) | async fn test_consume_tokens_multiple_consumers_direct() { FILE: src/torrent_file/mod.rs type V2RootInfo (line 14) | pub struct V2RootInfo { type V2Mapping (line 21) | pub struct V2Mapping { type Torrent (line 27) | pub struct Torrent { method tracker_urls (line 64) | pub fn tracker_urls(&self) -> Vec { method get_v2_roots (line 77) | pub fn get_v2_roots(&self) -> Vec<(String, u64, Vec)> { method get_layer_hashes (line 85) | pub fn get_layer_hashes(&self, root_hash: &[u8]) -> Option> { method calculate_v2_mapping (line 94) | pub fn calculate_v2_mapping(&self) -> V2Mapping { method get_v2_hash_layer (line 130) | pub fn get_v2_hash_layer( method file_list (line 181) | pub fn file_list(&self) -> Vec<(Vec, u64)> { function traverse_file_tree (line 196) | fn traverse_file_tree( type Info (line 234) | pub struct Info { method total_length (line 265) | pub fn total_length(&self) -> i64 { type InfoFile (line 286) | pub struct InfoFile { function deserialize_url_list (line 298) | fn deserialize_url_list<'de, D>(deserializer: D) -> Result i64 { function create_test_info (line 353) | fn create_test_info(meta_version: Option) -> Info { function build_v2_file_node (line 368) | fn build_v2_file_node(length: i64, root: Vec) -> Value { function create_test_torrent_with_layers (line 379) | fn create_test_torrent_with_layers() -> Torrent { function test_v2_piece_count_calculation (line 411) | fn test_v2_piece_count_calculation() { function test_hybrid_piece_count_prioritizes_v1_string (line 439) | fn test_hybrid_piece_count_prioritizes_v1_string() { function test_deterministic_v2_sorting (line 450) | fn test_deterministic_v2_sorting() { function test_v2_mapping_with_empty_files (line 478) | fn test_v2_mapping_with_empty_files() { function test_get_v2_hash_layer_with_offset (line 505) | fn test_get_v2_hash_layer_with_offset() { function test_get_v2_hash_layer_bep52_single_piece (line 519) | fn test_get_v2_hash_layer_bep52_single_piece() { function test_get_v2_hash_layer_bounds_check (line 534) | fn test_get_v2_hash_layer_bounds_check() { function test_get_v2_hash_layer_mock_priority (line 552) | fn test_get_v2_hash_layer_mock_priority() { function test_tracker_urls_flatten_announce_list_and_keep_http_fallback (line 579) | fn test_tracker_urls_flatten_announce_list_and_keep_http_fallback() { FILE: src/torrent_file/parser.rs type ParseError (line 11) | pub enum ParseError { method fmt (line 17) | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { method from (line 28) | fn from(e: serde_bencode::Error) -> Self { function polyfill_v2_files (line 33) | pub fn polyfill_v2_files(torrent: &mut Torrent) { function from_info_bytes (line 71) | pub fn from_info_bytes(info_bytes: &[u8]) -> Result { function from_bytes (line 101) | pub fn from_bytes(bencode_data: &[u8]) -> Result { function test_parse_bittorrent_v2_hybrid_structure (line 134) | fn test_parse_bittorrent_v2_hybrid_structure() { FILE: src/torrent_identity.rs function decode_info_hash (line 11) | pub fn decode_info_hash(hash_string: &str) -> Result, String> { function parse_hybrid_hashes (line 33) | pub fn parse_hybrid_hashes(magnet_link: &str) -> (Option>, Optio... function canonical_info_hash_from_magnet_link (line 73) | pub fn canonical_info_hash_from_magnet_link(magnet_link: &str) -> Option... function info_hash_from_torrent_source (line 85) | pub fn info_hash_from_torrent_source(source: &str) -> Option> { function info_hash_from_torrent_bytes (line 96) | pub fn info_hash_from_torrent_bytes(bytes: &[u8]) -> Option> { function canonical_magnet_identity_prefers_btih_even_when_btmh_is_last (line 123) | fn canonical_magnet_identity_prefers_btih_even_when_btmh_is_last() { function parse_hybrid_hashes_still_preserves_v2_when_v1_is_missing (line 136) | fn parse_hybrid_hashes_still_preserves_v2_when_v1_is_missing() { function decode_info_hash_accepts_v2_multihash_hex (line 146) | fn decode_info_hash_accepts_v2_multihash_hex() { FILE: src/torrent_manager/block_manager.rs constant BLOCK_SIZE (line 6) | pub const BLOCK_SIZE: u32 = 16_384; constant V2_HASH_LEN (line 9) | pub const V2_HASH_LEN: usize = 32; type LegacyAssembler (line 12) | pub struct LegacyAssembler { type BlockAddress (line 20) | pub struct BlockAddress { type BlockResult (line 30) | pub enum BlockResult { type BlockDecision (line 39) | pub enum BlockDecision { type FileInfo (line 52) | pub struct FileInfo { type BlockManager (line 59) | pub struct BlockManager { method new (line 84) | pub fn new() -> Self { method set_geometry (line 88) | pub fn set_geometry( method handle_incoming_block_decision (line 126) | pub fn handle_incoming_block_decision(&self, addr: BlockAddress) -> Bl... method get_file_for_offset (line 153) | fn get_file_for_offset(&self, global_offset: u64) -> Option<(usize, &F... method commit_verified_block (line 163) | pub fn commit_verified_block(&mut self, addr: BlockAddress) -> BlockRe... method pick_blocks_for_peer (line 182) | pub fn pick_blocks_for_peer( method mark_pending (line 223) | pub fn mark_pending(&mut self, global_idx: u32) { method unmark_pending (line 227) | pub fn unmark_pending(&mut self, global_idx: u32) { method blocks_in_piece (line 233) | fn blocks_in_piece(&self, piece_len: u32) -> u32 { method get_block_range (line 237) | pub fn get_block_range(&self, piece_idx: u32) -> (u32, u32) { method is_non_aligned_piece_grid (line 248) | pub fn is_non_aligned_piece_grid(&self) -> bool { method piece_block_addresses (line 252) | pub fn piece_block_addresses(&self, piece_index: u32) -> Vec u32 { method inflate_address (line 285) | pub fn inflate_address(&self, global_idx: u32) -> BlockAddress { method flatten_address (line 304) | pub fn flatten_address(&self, addr: BlockAddress) -> u32 { method is_piece_complete (line 308) | pub fn is_piece_complete(&self, piece_index: u32) -> bool { method handle_v1_block_buffering (line 330) | pub fn handle_v1_block_buffering( method inflate_address_from_overlay (line 375) | pub fn inflate_address_from_overlay( method total_pieces (line 398) | pub fn total_pieces(&self) -> usize { method update_rarity (line 402) | pub fn update_rarity<'a, I>(&mut self, peer_bitfields: I) method release_pending_blocks_for_peer (line 416) | pub fn release_pending_blocks_for_peer(&mut self, pending: &HashSet Vec { method commit_v1_piece (line 430) | pub fn commit_v1_piece(&mut self, piece_index: u32) { method revert_v1_piece_completion (line 441) | pub fn revert_v1_piece_completion(&mut self, piece_index: u32) { method reset_v1_buffer (line 452) | pub fn reset_v1_buffer(&mut self, piece_index: u32) { constant BLK_SIZE (line 461) | const BLK_SIZE: u32 = BLOCK_SIZE; function setup_manager (line 464) | fn setup_manager(piece_len: u32, total_len: u64) -> BlockManager { function test_geometry_and_total_blocks (line 480) | fn test_geometry_and_total_blocks() { function test_calculate_piece_size_full_and_last (line 500) | fn test_calculate_piece_size_full_and_last() { function test_block_range_calculation (line 519) | fn test_block_range_calculation() { function test_inflate_and_flatten_address (line 538) | fn test_inflate_and_flatten_address() { function test_inflate_address_final_partial_block (line 569) | fn test_inflate_address_final_partial_block() { function test_inflate_address_from_overlay_security_guard (line 589) | fn test_inflate_address_from_overlay_security_guard() { function test_non_aligned_adjacent_piece_completion_independence (line 616) | fn test_non_aligned_adjacent_piece_completion_independence() { function test_decision_routing_v1_only (line 642) | fn test_decision_routing_v1_only() { function test_decision_routing_v2_simple (line 655) | fn test_decision_routing_v2_simple() { function test_decision_routing_boundary_check (line 702) | fn test_decision_routing_boundary_check() { function test_endgame_duplicate_completion_suppression (line 738) | fn test_endgame_duplicate_completion_suppression() { function create_manager (line 781) | fn create_manager(piece_len: u32, total_len: u64) -> BlockManager { function test_geometry_exact_alignment (line 788) | fn test_geometry_exact_alignment() { function test_geometry_tiny_remainder (line 805) | fn test_geometry_tiny_remainder() { function test_geometry_partial_blocks_mid_stream (line 828) | fn test_geometry_partial_blocks_mid_stream() { function create_manager (line 864) | fn create_manager(piece_len: u32, total_len: u64) -> BlockManager { function test_inflate_address_overflow_protection (line 871) | fn test_inflate_address_overflow_protection() { function test_duplicate_block_handling (line 891) | fn test_duplicate_block_handling() { function test_revert_piece_clears_bits (line 930) | fn test_revert_piece_clears_bits() { function test_pick_blocks_standard_vs_endgame (line 961) | fn test_pick_blocks_standard_vs_endgame() { FILE: src/torrent_manager/manager.rs constant HASH_LENGTH (line 94) | const HASH_LENGTH: usize = 20; constant MAX_UPLOAD_REQUEST_ATTEMPTS (line 96) | const MAX_UPLOAD_REQUEST_ATTEMPTS: u32 = 7; constant MAX_PIECE_WRITE_ATTEMPTS (line 97) | const MAX_PIECE_WRITE_ATTEMPTS: u32 = 12; constant ACTIVITY_MESSAGE_MAX_LEN (line 98) | const ACTIVITY_MESSAGE_MAX_LEN: usize = 28; constant BASE_BACKOFF_MS (line 100) | const BASE_BACKOFF_MS: u64 = 1000; constant JITTER_MS (line 101) | const JITTER_MS: u64 = 100; function synthetic_peer_connect_failure (line 104) | fn synthetic_peer_connect_failure(error: &std::io::Error) -> SyntheticPe... type PreparedFileProbeEntry (line 116) | struct PreparedFileProbeEntry { type PreparedFileProbeBatch (line 122) | struct PreparedFileProbeBatch { type FileProbeBatchPreparation (line 130) | enum FileProbeBatchPreparation { type TorrentManager (line 135) | pub struct TorrentManager { method should_accept_new_peers (line 195) | fn should_accept_new_peers(&self) -> bool { method current_dht_demand_state (line 200) | fn current_dht_demand_state(&self) -> DhtDemandState { method current_dht_demand_metrics (line 211) | fn current_dht_demand_metrics(&self) -> DhtDemandMetrics { method sync_dht_demand (line 269) | fn sync_dht_demand(&mut self) { method sync_dht_demand (line 296) | fn sync_dht_demand(&mut self) {} method init_base (line 298) | fn init_base( method from_torrent (line 378) | pub fn from_torrent( method from_magnet (line 436) | pub fn from_magnet( method apply_action (line 497) | fn apply_action(&mut self, action: Action) { method handle_effect (line 507) | fn handle_effect(&mut self, effect: Effect) { method perform_validation (line 1326) | async fn perform_validation( method has_complete_storage_layout (line 1586) | async fn has_complete_storage_layout( method write_block_with_retry (line 1608) | async fn write_block_with_retry( method read_block_with_retry (line 1704) | async fn read_block_with_retry( method start_dht_lookup_task (line 1798) | fn start_dht_lookup_task( method stop_dht_lookup_task (line 1825) | fn stop_dht_lookup_task(&mut self) { method sync_dht_lookup_task (line 1834) | fn sync_dht_lookup_task(&mut self) { method sync_dht_lookup_task (line 1861) | fn sync_dht_lookup_task(&mut self) {} method stop_dht_lookup_task (line 1864) | fn stop_dht_lookup_task(&mut self) {} method generate_bitfield (line 1866) | fn generate_bitfield(&mut self) -> Vec { method connect_to_peer (line 1883) | pub fn connect_to_peer(&mut self, peer_addr: SocketAddr) { method validate_local_file (line 2073) | pub async fn validate_local_file(&mut self) -> Result<(), StorageError> { method generate_activity_message (line 2135) | fn generate_activity_message(&self, dl_speed: u64, ul_speed: u64) -> S... method cap_activity_message (line 2249) | fn cap_activity_message(message: String) -> String { method send_metrics (line 2258) | fn send_metrics( method file_probe_relative_path (line 2414) | fn file_probe_relative_path( method prepare_file_probe_batch (line 2437) | fn prepare_file_probe_batch( method collect_prepared_file_probe_batch (line 2501) | async fn collect_prepared_file_probe_batch( method collect_file_probe_batch (line 2552) | async fn collect_file_probe_batch( method spawn_file_probe_batch (line 2573) | fn spawn_file_probe_batch(&self, epoch: u64, start_file_index: usize, ... method run (line 2620) | pub async fn run(mut self, is_paused: bool) -> Result<(), Box(urls: I, now: Instant) -> HashMap Torrent { function build_test_dht_handle (line 3431) | fn build_test_dht_handle() -> crate::dht_service::DhtHandle { function build_test_params (line 3435) | fn build_test_params() -> TorrentParameters { function sync_dht_lookup_task_restarts_finished_handle (line 3472) | async fn sync_dht_lookup_task_restarts_finished_handle() { function test_connect_to_peer_skips_unexpired_known_seeder (line 3498) | async fn test_connect_to_peer_skips_unexpired_known_seeder() { function test_current_dht_demand_state_prioritizes_metadata (line 3521) | async fn test_current_dht_demand_state_prioritizes_metadata() { function test_current_dht_demand_state_uses_no_connected_peers_after_metadata (line 3538) | async fn test_current_dht_demand_state_uses_no_connected_peers_after_met... function test_current_dht_demand_state_relaxes_with_active_peers (line 3555) | async fn test_current_dht_demand_state_relaxes_with_active_peers() { function test_current_dht_demand_state_normalizes_active_peer_count (line 3576) | async fn test_current_dht_demand_state_normalizes_active_peer_count() { function test_current_dht_demand_metrics_reports_torrent_and_peer_activity (line 3602) | async fn test_current_dht_demand_metrics_reports_torrent_and_peer_activi... function test_send_metrics_flushes_batched_file_activity (line 3661) | async fn test_send_metrics_flushes_batched_file_activity() { function setup_test_harness (line 3736) | fn setup_test_harness() -> ( function test_from_magnet_keeps_http_tracker_fallback_alongside_udp (line 3791) | async fn test_from_magnet_keeps_http_tracker_fallback_alongside_udp() { function test_from_torrent_uses_announce_list_and_keeps_http_fallback (line 3817) | async fn test_from_torrent_uses_announce_list_and_keeps_http_fallback() { function add_peer (line 3842) | fn add_peer( function test_activity_message_metadata_and_peer_count (line 3858) | fn test_activity_message_metadata_and_peer_count() { function test_activity_message_validation_shows_progress_percentage (line 3875) | fn test_activity_message_validation_shows_progress_percentage() { function test_activity_message_requesting_pieces_shows_quantifiers (line 3890) | fn test_activity_message_requesting_pieces_shows_quantifiers() { function test_activity_message_waiting_for_data_is_plain_language (line 3907) | fn test_activity_message_waiting_for_data_is_plain_language() { function test_activity_message_done_strings_preserved (line 3929) | fn test_activity_message_done_strings_preserved() { function test_peer_admission_guard_blocks_new_outgoing_connection (line 3939) | async fn test_peer_admission_guard_blocks_new_outgoing_connection() { function test_peer_admission_guard_allows_new_outgoing_connection_when_open (line 3957) | async fn test_peer_admission_guard_allows_new_outgoing_connection_when_o... function test_peer_admission_guard_blocks_new_outgoing_connection_while_paused (line 3975) | async fn test_peer_admission_guard_blocks_new_outgoing_connection_while_... function test_peer_admission_guard_handles_10k_candidates_when_closed (line 3994) | async fn test_peer_admission_guard_handles_10k_candidates_when_closed() { function test_duplicate_metadata_torrent_is_ignored_in_manager (line 4014) | async fn test_duplicate_metadata_torrent_is_ignored_in_manager() { function test_cpu_hashing_is_non_blocking (line 4155) | async fn test_cpu_hashing_is_non_blocking() { function test_slow_disk_backpressure (line 4200) | async fn test_slow_disk_backpressure() { function test_manager_integration_single_block (line 4257) | async fn test_manager_integration_single_block() { function test_pipelined_download_two_thousand_blocks (line 4491) | async fn test_pipelined_download_two_thousand_blocks() { function test_v2_seeding_relative_offset_logic (line 4821) | async fn test_v2_seeding_relative_offset_logic() { function test_v2_seeding_rejects_out_of_bounds (line 4938) | async fn test_v2_seeding_rejects_out_of_bounds() { function test_v2_seeding_boundary_edge_cases (line 5018) | async fn test_v2_seeding_boundary_edge_cases() { function setup_scale_test_harness (line 5117) | fn setup_scale_test_harness() -> ( function test_manager_scale_1000_hybrid (line 5187) | async fn test_manager_scale_1000_hybrid() { function test_manager_scale_1000_pure_v2 (line 5310) | async fn test_manager_scale_1000_pure_v2() { function build_mock_v2_file_tree (line 5431) | fn build_mock_v2_file_tree( function test_v2_multi_file_alignment_bug (line 5456) | async fn test_v2_multi_file_alignment_bug() { function test_v2_multi_file_alignment_bug_regression (line 5502) | async fn test_v2_multi_file_alignment_bug_regression() { function test_v2_tail_piece_validation_accuracy (line 5583) | async fn test_v2_tail_piece_validation_accuracy() { function test_skip_hashing_true_does_not_mark_complete_when_storage_missing (line 5695) | async fn test_skip_hashing_true_does_not_mark_complete_when_storage_miss... function test_skip_hashing_v2_uses_aligned_v2_piece_space (line 5756) | async fn test_skip_hashing_v2_uses_aligned_v2_piece_space() { function test_file_probe_reports_missing_and_size_mismatch (line 5827) | async fn test_file_probe_reports_missing_and_size_mismatch() { function test_file_probe_omits_skipped_files (line 5911) | async fn test_file_probe_omits_skipped_files() { FILE: src/torrent_manager/merkle.rs function verify_merkle_proof (line 7) | pub fn verify_merkle_proof( function compute_v2_piece_root (line 52) | pub fn compute_v2_piece_root(data: &[u8], expected_len: usize) -> [u8; 3... function test_merkle_verification_relative_index_parity (line 91) | fn test_merkle_verification_relative_index_parity() { function test_v2_merkle_root_calculation (line 141) | fn test_v2_merkle_root_calculation() { function test_v2_merkle_root_single_block (line 168) | fn test_v2_merkle_root_single_block() { function verify_tail_padding_fix (line 183) | fn verify_tail_padding_fix() { function test_v2_network_verification_padding_accuracy (line 203) | fn test_v2_network_verification_padding_accuracy() { function test_v2_small_file_less_than_piece_len (line 230) | fn test_v2_small_file_less_than_piece_len() { function test_v2_merkle_parity_regression (line 247) | fn test_v2_merkle_parity_regression() { function test_v2_small_file_root_mismatch_regression (line 279) | fn test_v2_small_file_root_mismatch_regression() { function test_compute_root_3_blocks_padding (line 300) | fn test_compute_root_3_blocks_padding() { function test_verify_deep_tree_path (line 344) | fn test_verify_deep_tree_path() { function test_verify_fails_on_corruption (line 432) | fn test_verify_fails_on_corruption() { function test_v2_verification_layer_zero_direct_match (line 463) | fn test_v2_verification_layer_zero_direct_match() { function test_v2_verification_piece_mismatch_fails (line 497) | fn test_v2_verification_piece_mismatch_fails() { function test_v2_verification_context_padding_consistency (line 512) | fn test_v2_verification_context_padding_consistency() { FILE: src/torrent_manager/mod.rs type TorrentParameters (line 36) | pub struct TorrentParameters { type DiskIoOperation (line 54) | pub struct DiskIoOperation { type FileProbeEntry (line 61) | pub struct FileProbeEntry { type FileProbeBatchResult (line 70) | pub struct FileProbeBatchResult { function data_availability_from_file_probe_result (line 79) | pub fn data_availability_from_file_probe_result(result: &FileProbeBatchR... type TorrentFileProbeStatus (line 92) | pub enum TorrentFileProbeStatus { type FileActivityDirection (line 98) | pub enum FileActivityDirection { type FileActivityUpdate (line 104) | pub struct FileActivityUpdate { type ManagerEvent (line 110) | pub enum ManagerEvent { type SyntheticPeerConnectFailure (line 175) | pub enum SyntheticPeerConnectFailure { type ManagerCommand (line 190) | pub enum ManagerCommand { function data_availability_from_completed_probe_uses_problem_file_count (line 220) | fn data_availability_from_completed_probe_uses_problem_file_count() { function data_availability_from_incomplete_probe_result_is_unknown (line 255) | fn data_availability_from_incomplete_probe_result_is_unknown() { FILE: src/torrent_manager/piece_manager.rs type PieceStatus (line 19) | pub enum PieceStatus { type EffectivePiecePriority (line 26) | pub enum EffectivePiecePriority { type PieceManager (line 34) | pub struct PieceManager { method new (line 48) | pub fn new() -> Self { method set_geometry (line 63) | pub fn set_geometry( method set_initial_fields (line 80) | pub fn set_initial_fields(&mut self, num_pieces: usize, validation_com... method apply_priorities (line 99) | pub fn apply_priorities(&mut self, new_priorities: Vec Vec { method reset_piece_assembly (line 201) | pub fn reset_piece_assembly(&mut self, piece_index: u32) { method requeue_pending_to_need (line 212) | pub fn requeue_pending_to_need(&mut self, piece_index: u32) { method release_pending_peer_or_requeue (line 238) | pub fn release_pending_peer_or_requeue(&mut self, piece_index: u32, pe... method update_rarity (line 249) | pub fn update_rarity<'a, I>(&mut self, all_peer_bitfields: I) method choose_piece_for_peer (line 267) | pub fn choose_piece_for_peer( method mark_as_pending (line 329) | pub fn mark_as_pending(&mut self, piece_index: u32, peer_id: String) { method clear_assembly_buffers (line 337) | pub fn clear_assembly_buffers(&mut self) { method requestable_block_addresses_for_piece (line 341) | pub fn requestable_block_addresses_for_piece(&self, piece_index: u32) ... method cancel_tuples_for_piece (line 371) | pub fn cancel_tuples_for_piece(&self, piece_index: u32) -> Vec<(u32, u... function setup_manager (line 387) | fn setup_manager(num_pieces: usize) -> PieceManager { function test_initialization_not_validated (line 400) | fn test_initialization_not_validated() { function test_initialization_pre_validated (line 414) | fn test_initialization_pre_validated() { function test_state_transitions (line 426) | fn test_state_transitions() { function test_piece_assembly_and_reset (line 475) | fn test_piece_assembly_and_reset() { function test_update_rarity (line 519) | fn test_update_rarity() { function test_choose_piece_standard_mode (line 543) | fn test_choose_piece_standard_mode() { function test_choose_piece_endgame_mode_prioritizes_pending (line 582) | fn test_choose_piece_endgame_mode_prioritizes_pending() { function test_choose_piece_endgame_mode_excludes_peer_pending (line 605) | fn test_choose_piece_endgame_mode_excludes_peer_pending() { function test_handle_block_out_of_order (line 626) | fn test_handle_block_out_of_order() { function test_handle_block_duplicate (line 662) | fn test_handle_block_duplicate() { function test_handle_block_for_completed_piece (line 707) | fn test_handle_block_for_completed_piece() { function test_revert_synchronization (line 739) | fn test_revert_synchronization() { function test_lazy_geometry_initialization (line 773) | fn test_lazy_geometry_initialization() { function test_tiny_last_block (line 787) | fn test_tiny_last_block() { function test_priority_sorting_order (line 815) | fn test_priority_sorting_order() { function test_dynamic_priority_switching (line 865) | fn test_dynamic_priority_switching() { function test_priority_overrides_rarity (line 891) | fn test_priority_overrides_rarity() { function test_mixed_priority_endgame (line 916) | fn test_mixed_priority_endgame() { function test_all_skipped_behavior (line 945) | fn test_all_skipped_behavior() { function test_requestable_block_addresses_for_piece_aligned_filters_completed (line 976) | fn test_requestable_block_addresses_for_piece_aligned_filters_completed() { function test_requestable_block_addresses_for_piece_non_aligned_not_suppressed (line 998) | fn test_requestable_block_addresses_for_piece_non_aligned_not_suppressed... function test_requestable_block_addresses_for_piece_respects_assembler_mask (line 1017) | fn test_requestable_block_addresses_for_piece_respects_assembler_mask() { FILE: src/torrent_manager/state.rs constant MAX_TIMEOUT_COUNT (line 35) | const MAX_TIMEOUT_COUNT: u32 = 10; constant SMOOTHING_PERIOD_MS (line 36) | const SMOOTHING_PERIOD_MS: f64 = 5000.0; constant PEER_UPLOAD_IN_FLIGHT_LIMIT (line 37) | const PEER_UPLOAD_IN_FLIGHT_LIMIT: usize = 16; constant MAX_BLOCK_SIZE (line 38) | const MAX_BLOCK_SIZE: u32 = 131_072; constant UPLOAD_SLOTS_DEFAULT (line 39) | const UPLOAD_SLOTS_DEFAULT: usize = 4; constant DEFAULT_ANNOUNCE_INTERVAL_SECS (line 40) | const DEFAULT_ANNOUNCE_INTERVAL_SECS: u64 = 60; constant MAX_PIPELINE_DEPTH (line 41) | pub const MAX_PIPELINE_DEPTH: usize = 512; constant KNOWN_SEEDER_TTL (line 42) | const KNOWN_SEEDER_TTL: Duration = Duration::from_secs(60 * 60); constant PEER_ADMISSION_QUALITY_THRESHOLD (line 46) | const PEER_ADMISSION_QUALITY_THRESHOLD: usize = 400; type PeerAddr (line 48) | pub type PeerAddr = SocketAddr; type Action (line 51) | pub enum Action { type Effect (line 183) | pub enum Effect { type TrackerState (line 277) | pub struct TrackerState { type TorrentActivity (line 284) | pub enum TorrentActivity { type TorrentStatus (line 301) | pub enum TorrentStatus { type ChokeStatus (line 311) | pub enum ChokeStatus { type FileActivityInterval (line 317) | struct FileActivityInterval { type TorrentState (line 323) | pub struct TorrentState { method new (line 413) | pub fn new( method get_piece_size (line 482) | fn get_piece_size(&self, piece_index: u32) -> usize { method update (line 517) | pub fn update(&mut self, action: Action) -> Vec { method rebuild_v2_mappings (line 2320) | fn rebuild_v2_mappings(&mut self) -> (u32, HashMap) { method calculate_v2_verify_params (line 2351) | fn calculate_v2_verify_params(&self, piece_index: u32, data_len: usize... method record_pending_file_activity (line 2379) | fn record_pending_file_activity( method drain_file_activity_updates (line 2418) | fn drain_file_activity_updates(&mut self) -> Vec { method rebuild_multi_file_info (line 2526) | pub fn rebuild_multi_file_info(&mut self) { method calculate_piece_priorities (line 2598) | fn calculate_piece_priorities( method refresh_peer_admission_guard (line 2672) | fn refresh_peer_admission_guard(&mut self) { method default (line 366) | fn default() -> Self { function calculate_deletion_lists (line 2686) | pub fn calculate_deletion_lists( type PeerState (line 2729) | pub struct PeerState { method new (line 2758) | pub fn new(ip_port: String, peer_tx: Sender, created_a... function create_empty_state (line 2799) | pub(crate) fn create_empty_state() -> TorrentState { function create_dummy_torrent (line 2810) | pub(crate) fn create_dummy_torrent(piece_count: usize) -> Torrent { function add_peer (line 2839) | fn add_peer(state: &mut TorrentState, id: &str) { function drained_download_paths_for_activity (line 2847) | fn drained_download_paths_for_activity( function test_peer_admission_guard_closes_under_high_connected_pressure (line 2869) | fn test_peer_admission_guard_closes_under_high_connected_pressure() { function test_peer_admission_guard_reopens_at_reopen_threshold (line 2888) | fn test_peer_admission_guard_reopens_at_reopen_threshold() { function test_peer_admission_guard_closes_immediately_on_successful_connection (line 2908) | fn test_peer_admission_guard_closes_immediately_on_successful_connection... function test_peer_admission_guard_closes_immediately_on_peer_discovery (line 2928) | fn test_peer_admission_guard_closes_immediately_on_peer_discovery() { function test_peer_admission_guard_stays_closed_above_reopen_threshold (line 2948) | fn test_peer_admission_guard_stays_closed_above_reopen_threshold() { function test_peer_admission_guard_reopens_at_exact_reopen_threshold (line 2968) | fn test_peer_admission_guard_reopens_at_exact_reopen_threshold() { function test_metadata_received_triggers_initialization_flow (line 2990) | fn test_metadata_received_triggers_initialization_flow() { function test_recalculate_chokes_unchokes_fastest_downloader (line 3017) | fn test_recalculate_chokes_unchokes_fastest_downloader() { function test_recalculate_chokes_unchokes_fastest_uploader_when_seeding (line 3080) | fn test_recalculate_chokes_unchokes_fastest_uploader_when_seeding() { function test_assign_work_requests_piece_peer_has (line 3131) | fn test_assign_work_requests_piece_peer_has() { function test_data_unavailable_blocks_unchoke_and_upload (line 3172) | fn test_data_unavailable_blocks_unchoke_and_upload() { function test_set_data_availability_does_not_emit_metrics (line 3201) | fn test_set_data_availability_does_not_emit_metrics() { function test_set_data_availability_rechokes_existing_upload_slots (line 3211) | fn test_set_data_availability_rechokes_existing_upload_slots() { function test_piece_verified_valid_trigger_write (line 3234) | fn test_piece_verified_valid_trigger_write() { function test_piece_verified_invalid_disconnects_peer (line 3259) | fn test_piece_verified_invalid_disconnects_peer() { function test_check_completion_transitions_to_done (line 3282) | fn test_check_completion_transitions_to_done() { function test_peer_disconnect_decrements_count (line 3320) | fn test_peer_disconnect_decrements_count() { function test_cleanup_records_full_bitfield_seeders_when_seeding (line 3346) | fn test_cleanup_records_full_bitfield_seeders_when_seeding() { function test_cleanup_prunes_expired_known_seeders (line 3370) | fn test_cleanup_prunes_expired_known_seeders() { function test_enter_endgame_mode (line 3383) | fn test_enter_endgame_mode() { function test_peer_chokes_us_mid_download (line 3424) | fn test_peer_chokes_us_mid_download() { function test_optimistic_unchoke_rotates (line 3445) | fn test_optimistic_unchoke_rotates() { function test_peer_have_updates_bitfield_and_triggers_work (line 3500) | fn test_peer_have_updates_bitfield_and_triggers_work() { function test_cancel_upload_aborts_task (line 3535) | fn test_cancel_upload_aborts_task() { function test_invariant_pending_removed_on_disk_write (line 3558) | fn test_invariant_pending_removed_on_disk_write() { function regression_delete_clears_piece_manager_state (line 3609) | fn regression_delete_clears_piece_manager_state() { function regression_redundant_disk_write_completion (line 3678) | fn regression_redundant_disk_write_completion() { function peer_interested_fills_available_upload_slot_without_recalculation (line 3720) | fn peer_interested_fills_available_upload_slot_without_recalculation() { function assign_work_skips_verified_piece_while_disk_write_is_pending (line 3753) | fn assign_work_skips_verified_piece_while_disk_write_is_pending() { function failed_duplicate_verify_preserves_pending_disk_write_guard (line 3821) | fn failed_duplicate_verify_preserves_pending_disk_write_guard() { function regression_metric_integer_overflow (line 3890) | fn regression_metric_integer_overflow() { function regression_peer_count_sync (line 3912) | fn regression_peer_count_sync() { function test_download_starts_immediately_after_validation (line 3944) | fn test_download_starts_immediately_after_validation() { function test_assign_work_sends_interested_even_if_unchoked (line 4003) | fn test_assign_work_sends_interested_even_if_unchoked() { function test_partial_piece_request (line 4069) | fn test_partial_piece_request() { function test_assign_work_non_aligned_boundary_piece_identity (line 4128) | fn test_assign_work_non_aligned_boundary_piece_identity() { function test_assign_work_non_aligned_boundary_offsets_for_piece (line 4188) | fn test_assign_work_non_aligned_boundary_offsets_for_piece() { function test_incoming_block_non_aligned_updates_correct_piece_assembler (line 4251) | fn test_incoming_block_non_aligned_updates_correct_piece_assembler() { function test_restart_resume_non_aligned_requests_only_missing_blocks (line 4333) | fn test_restart_resume_non_aligned_requests_only_missing_blocks() { function test_non_aligned_verify_fail_requeue_clears_exact_piece_state (line 4404) | fn test_non_aligned_verify_fail_requeue_clears_exact_piece_state() { function test_assign_work_non_aligned_no_zero_or_oversize_block_requests (line 4444) | fn test_assign_work_non_aligned_no_zero_or_oversize_block_requests() { function test_non_aligned_full_piece_download_emits_verify_for_target_piece (line 4509) | fn test_non_aligned_full_piece_download_emits_verify_for_target_piece() { function test_assign_work_tiny_piece_keeps_target_piece_identity (line 4576) | fn test_assign_work_tiny_piece_keeps_target_piece_identity() { function test_multi_file_non_aligned_priority_boundary_mixed_piece_not_skipped (line 4632) | fn test_multi_file_non_aligned_priority_boundary_mixed_piece_not_skipped... function test_non_aligned_choke_disconnect_requeues_without_ghost_pending (line 4674) | fn test_non_aligned_choke_disconnect_requeues_without_ghost_pending() { function test_non_aligned_assign_work_not_suppressed_by_previous_piece_global_bits (line 4723) | fn test_non_aligned_assign_work_not_suppressed_by_previous_piece_global_... function test_upload_starts_immediately_after_validation (line 4790) | fn test_upload_starts_immediately_after_validation() { function test_tracker_spam_during_validation (line 4843) | fn test_tracker_spam_during_validation() { function metadata_received_renormalizes_existing_trackers_and_keeps_http_fallback (line 4883) | fn metadata_received_renormalizes_existing_trackers_and_keeps_http_fallb... function test_manager_init_active_triggers_announce (line 4918) | fn test_manager_init_active_triggers_announce() { function test_manager_init_paused_halts_activity (line 4950) | fn test_manager_init_paused_halts_activity() { function test_pause_disconnects_live_peers_and_clears_state (line 4983) | fn test_pause_disconnects_live_peers_and_clears_state() { function test_state_scale_2k_blocks_simulation (line 5014) | fn test_state_scale_2k_blocks_simulation() { function test_debug_3_blocks_trace (line 5163) | fn test_debug_3_blocks_trace() { function test_assign_work_skips_already_active_gap_block (line 5312) | fn test_assign_work_skips_already_active_gap_block() { function test_assign_work_honors_high_priority_piece (line 5385) | fn test_assign_work_honors_high_priority_piece() { function test_endgame_allows_duplicate_pending_block_request_from_another_peer (line 5437) | fn test_endgame_allows_duplicate_pending_block_request_from_another_peer... function test_endgame_choke_releases_only_that_peer_pending_owner (line 5486) | fn test_endgame_choke_releases_only_that_peer_pending_owner() { function test_assign_work_is_sequential (line 5533) | fn test_assign_work_is_sequential() { function test_assign_work_multi_piece_saturation (line 5604) | fn test_assign_work_multi_piece_saturation() { function test_v2_hybrid_boundary_routing (line 5704) | fn test_v2_hybrid_boundary_routing() { function test_v2_deferred_verification_with_offset (line 5795) | fn test_v2_deferred_verification_with_offset() { function test_v2_verification_failure (line 5843) | fn test_v2_verification_failure() { function test_v2_verification_failure_disconnects_peer (line 5900) | fn test_v2_verification_failure_disconnects_peer() { function test_v2_state_cleanup_after_success (line 5961) | fn test_v2_state_cleanup_after_success() { function test_v2_duplicate_handling_robustness (line 6019) | fn test_v2_duplicate_handling_robustness() { function test_v2_scale_1000_deferred_blocks (line 6082) | fn test_v2_scale_1000_deferred_blocks() { function test_scale_1000_blocks_pure_v2 (line 6168) | fn test_scale_1000_blocks_pure_v2() { function test_v2_memory_cap_enforcement (line 6267) | fn test_v2_memory_cap_enforcement() { function test_hybrid_v1_v2_interop (line 6297) | fn test_hybrid_v1_v2_interop() { function test_v2_full_completion_lifecycle (line 6360) | fn test_v2_full_completion_lifecycle() { function test_v2_cleanup_on_completion_race (line 6428) | fn test_v2_cleanup_on_completion_race() { function test_v2_cleanup_on_failure (line 6494) | fn test_v2_cleanup_on_failure() { function test_hybrid_swarm_interop (line 6543) | fn test_hybrid_swarm_interop() { function test_v2_magnet_metadata_sequence (line 6608) | fn test_v2_magnet_metadata_sequence() { function test_v2_magnet_metadata_sequence_multi_file (line 6682) | fn test_v2_magnet_metadata_sequence_multi_file() { function test_scale_1000_blocks_hybrid (line 6795) | fn test_scale_1000_blocks_hybrid() { function test_v2_verification_with_nonzero_file_offset (line 6864) | fn test_v2_verification_with_nonzero_file_offset() { function test_v2_local_lookup_optimization (line 6945) | fn test_v2_local_lookup_optimization() { function test_repro_v2_proof_priority_bug (line 7018) | fn test_repro_v2_proof_priority_bug() { function test_incoming_block_uses_local_leaf_hash_priority (line 7085) | fn test_incoming_block_uses_local_leaf_hash_priority() { function test_v2_tail_block_request_clamping (line 7174) | fn test_v2_tail_block_request_clamping() { function test_v2_triggers_hash_request_when_buffering (line 7265) | fn test_v2_triggers_hash_request_when_buffering() { function test_v2_magnet_scenario_requests_hashes_when_layers_missing (line 7326) | fn test_v2_magnet_scenario_requests_hashes_when_layers_missing() { function test_state_v1_metadata_workflow (line 7408) | fn test_state_v1_metadata_workflow() { function test_state_hybrid_metadata_workflow (line 7482) | fn test_state_hybrid_metadata_workflow() { function test_state_scale_1000_v2_metadata_workflow (line 7575) | fn test_state_scale_1000_v2_metadata_workflow() { function test_repro_magnet_bitfield_truncation (line 7706) | fn test_repro_magnet_bitfield_truncation() { function test_assign_work_is_blocked_when_path_is_missing (line 7776) | fn test_assign_work_is_blocked_when_path_is_missing() { function test_delete_action_without_path_emits_completion (line 7830) | fn test_delete_action_without_path_emits_completion() { function test_file_priority_boundary_mapping (line 7874) | fn test_file_priority_boundary_mapping() { function test_completion_with_skipped_files (line 7923) | fn test_completion_with_skipped_files() { function test_repro_validation_complete_ignores_skip_mixed (line 7961) | fn test_repro_validation_complete_ignores_skip_mixed() { function test_config_after_metadata_applies_priorities (line 8027) | fn test_config_after_metadata_applies_priorities() { function test_peer_disconnect_batches_until_threshold (line 8074) | fn test_peer_disconnect_batches_until_threshold() { function test_peer_disconnect_force_flush (line 8105) | fn test_peer_disconnect_force_flush() { function test_cleanup_flushes_stuck_peers_via_batch (line 8133) | fn test_cleanup_flushes_stuck_peers_via_batch() { function touched_relative_paths_for_activity_handles_single_file (line 8162) | fn touched_relative_paths_for_activity_handles_single_file() { function touched_relative_paths_for_activity_handles_boundary_spans (line 8195) | fn touched_relative_paths_for_activity_handles_boundary_spans() { function incoming_block_queues_file_activity_updates_until_tick_flush (line 8236) | fn incoming_block_queues_file_activity_updates_until_tick_flush() { function drain_file_activity_updates_dedupes_paths_within_each_direction (line 8293) | fn drain_file_activity_updates_dedupes_paths_within_each_direction() { function drain_file_activity_updates_preserves_out_of_order_intervals (line 8353) | fn drain_file_activity_updates_preserves_out_of_order_intervals() { function test_container_logic_explicit_no_folder (line 8398) | fn test_container_logic_explicit_no_folder() { function mock_mfi (line 8446) | fn mock_mfi(paths: Vec<&str>) -> MultiFileInfo { function test_delete_single_file_torrent (line 8465) | fn test_delete_single_file_torrent() { function test_delete_standard_folder_torrent (line 8483) | fn test_delete_standard_folder_torrent() { function test_delete_nested_directories (line 8495) | fn test_delete_nested_directories() { function test_delete_safety_boundary_escape (line 8516) | fn test_delete_safety_boundary_escape() { function test_delete_matching_container (line 8534) | fn test_delete_matching_container() { function test_delete_root_safety_mismatch (line 8550) | fn test_delete_root_safety_mismatch() { function test_delete_renamed_container_safety (line 8566) | fn test_delete_renamed_container_safety() { function test_delete_subfolders_always (line 8582) | fn test_delete_subfolders_always() { function check_invariants (line 8599) | fn check_invariants(state: &TorrentState) { constant PIECE_LEN (line 8902) | const PIECE_LEN: u32 = 16384; constant NUM_PIECES (line 8903) | const NUM_PIECES: usize = 20; constant MAX_BLOCK (line 8904) | const MAX_BLOCK: u32 = 131_072; type TorrentVariant (line 8910) | enum TorrentVariant { type TorrentFuzzCase (line 8918) | struct TorrentFuzzCase { function torrent_shape_strategy (line 8925) | fn torrent_shape_strategy() -> impl Strategy { function build_fuzz_torrent (line 8955) | fn build_fuzz_torrent(case: &TorrentFuzzCase) -> Torrent { function bitfield_has_piece (line 9046) | fn bitfield_has_piece(bitfield: &[u8], piece_index: usize) -> bool { function encode_bool_bitfield (line 9055) | fn encode_bool_bitfield(bits: &[bool]) -> Vec { type FuzzHarnessConfig (line 9068) | struct FuzzHarnessConfig { function default_harness_config (line 9081) | fn default_harness_config() -> FuzzHarnessConfig { type SimulatedManagerCommand (line 9096) | enum SimulatedManagerCommand { function enqueue_from_effect (line 9101) | fn enqueue_from_effect( function run_piece_selection_completion_harness (line 9186) | fn run_piece_selection_completion_harness( type NetworkFault (line 9616) | enum NetworkFault { function inject_reordering_faults (line 9624) | fn inject_reordering_faults(actions: Vec, seed: u64) -> Vec, fault_entropy: Vec) -... function tit_for_tat_strategy (line 9737) | fn tit_for_tat_strategy() -> impl Strategy { function rarest_first_strategy (line 9764) | fn rarest_first_strategy() -> impl Strategy { function tit_for_tat_snubbed_strategy (line 9813) | fn tit_for_tat_snubbed_strategy() -> impl Strategy { function rarest_first_tie_strategy (line 9840) | fn rarest_first_tie_strategy() -> impl Strategy { function combined_algo_strategy (line 9877) | fn combined_algo_strategy() -> impl Strategy { function free_rider_strategy (line 9930) | fn free_rider_strategy() -> impl Strategy { function huge_swarm_strategy (line 9981) | fn huge_swarm_strategy() -> impl Strategy { function lifecycle_transition_strategy (line 10027) | fn lifecycle_transition_strategy() -> impl Strategy> { function network_action_strategy (line 10090) | fn network_action_strategy() -> impl Strategy { function protocol_action_strategy (line 10123) | fn protocol_action_strategy() -> impl Strategy { function boundary_data_strategy (line 10156) | fn boundary_data_strategy() -> impl Strategy { function system_response_strategy (line 10211) | fn system_response_strategy() -> impl Strategy { function lifecycle_strategy (line 10242) | fn lifecycle_strategy() -> impl Strategy { function chaos_strategy (line 10255) | fn chaos_strategy() -> impl Strategy { function protocol_violation_strategy (line 10265) | fn protocol_violation_strategy() -> impl Strategy> { function successful_download_story (line 10342) | fn successful_download_story() -> impl Strategy> { function mixed_behavior_strategy (line 10387) | fn mixed_behavior_strategy() -> impl Strategy> { function populated_state_strategy (line 10396) | fn populated_state_strategy() -> impl Strategy { type TorrentModel (line 10712) | pub struct TorrentModel { method new_file (line 10722) | fn new_file(pieces: u32) -> Self { method new_magnet (line 10733) | fn new_magnet(pieces: u32) -> Self { type State (line 10747) | type State = Self; type Transition (line 10748) | type Transition = Action; method init_state (line 10750) | fn init_state() -> BoxedStrategy { method transitions (line 10758) | fn transitions(state: &Self::State) -> BoxedStrategy { method apply (line 10891) | fn apply(mut state: Self::State, trans: &Self::Transition) -> Self::State { type SystemUnderTest (line 10967) | type SystemUnderTest = TorrentState; type Reference (line 10968) | type Reference = TorrentModel; method init_test (line 10970) | fn init_test(ref_state: &TorrentModel) -> Self::SystemUnderTest { method apply (line 10998) | fn apply( function full_bitfield (line 11160) | fn full_bitfield(num_pieces: usize) -> Vec { function create_manager_harness (line 11170) | fn create_manager_harness( function spawn_mock_peer (line 11270) | async fn spawn_mock_peer( function test_case_06_rarest_first_strategy (line 11398) | async fn test_case_06_rarest_first_strategy() { function test_case_08_full_swarm_1000_blocks (line 11467) | async fn test_case_08_full_swarm_1000_blocks() { function test_debug_pipeline_latency (line 11547) | async fn test_debug_pipeline_latency() { function test_non_aligned_piece_length_small_swarm_completes (line 11603) | async fn test_non_aligned_piece_length_small_swarm_completes() { function test_tiny_piece_length_small_swarm_completes (line 11647) | async fn test_tiny_piece_length_small_swarm_completes() { function decode_triplet_event (line 11690) | fn decode_triplet_event(msg: &[u8], expected_kind: u8) -> Option<(u32, u... function test_non_aligned_request_identity_emits_piece_local_requests (line 11701) | async fn test_non_aligned_request_identity_emits_piece_local_requests() { function test_aligned_request_identity_emits_piece_local_requests (line 11774) | async fn test_aligned_request_identity_emits_piece_local_requests() { function test_non_aligned_cancel_identity_emits_piece_local_cancels (line 11825) | async fn test_non_aligned_cancel_identity_emits_piece_local_cancels() { function test_aligned_cancel_identity_emits_piece_local_cancels (line 11910) | async fn test_aligned_cancel_identity_emits_piece_local_cancels() { FILE: src/tracker/client.rs constant UDP_PROTOCOL_ID (line 26) | const UDP_PROTOCOL_ID: u64 = 0x41727101980; constant UDP_CONNECT_ACTION (line 27) | const UDP_CONNECT_ACTION: u32 = 0; constant UDP_ANNOUNCE_ACTION (line 28) | const UDP_ANNOUNCE_ACTION: u32 = 1; constant UDP_ERROR_ACTION (line 29) | const UDP_ERROR_ACTION: u32 = 3; constant TRACKER_PEER_DNS_TIMEOUT (line 30) | const TRACKER_PEER_DNS_TIMEOUT: Duration = Duration::from_secs(1); constant TRACKER_PEER_DNS_CONCURRENCY (line 31) | const TRACKER_PEER_DNS_CONCURRENCY: usize = 8; constant UDP_TRACKER_DNS_TIMEOUT (line 32) | const UDP_TRACKER_DNS_TIMEOUT: Duration = Duration::from_secs(1); constant UDP_REQUEST_TIMEOUT (line 33) | const UDP_REQUEST_TIMEOUT: Duration = Duration::from_secs(5); constant UDP_REQUEST_RETRIES (line 34) | const UDP_REQUEST_RETRIES: usize = 3; function announce_started (line 36) | pub async fn announce_started( function announce_periodic (line 57) | pub async fn announce_periodic( function announce_completed (line 80) | pub async fn announce_completed( function announce_stopped (line 102) | pub async fn announce_stopped( type AnnounceParams (line 125) | struct AnnounceParams { function make_announce_request (line 137) | async fn make_announce_request(params: AnnounceParams) -> Result Result( function classify_http_tracker_error (line 312) | fn classify_http_tracker_error( function format_content_type_suffix (line 341) | fn format_content_type_suffix(content_type: Option<&str>) -> String { function response_preview (line 347) | fn response_preview(response: &[u8]) -> Option { function make_udp_announce_request (line 364) | async fn make_udp_announce_request( function resolve_udp_tracker_addrs (line 377) | async fn resolve_udp_tracker_addrs(url: &Url) -> Result,... function resolve_udp_tracker_addrs_with_lookup (line 393) | async fn resolve_udp_tracker_addrs_with_lookup( function retry_udp_announce_across_addrs (line 415) | async fn retry_udp_announce_across_addrs( function try_udp_announce_once_to_addr (line 438) | async fn try_udp_announce_once_to_addr( function try_udp_announce_once (line 451) | async fn try_udp_announce_once( function send_udp_connect_request (line 478) | async fn send_udp_connect_request(socket: &UdpSocket) -> Result R... function send_udp_announce_request (line 523) | async fn send_udp_announce_request( function parse_udp_announce_response (line 552) | fn parse_udp_announce_response( function parse_compact_ipv4_peers (line 607) | fn parse_compact_ipv4_peers(bytes: &[u8]) -> Result, Tra... function parse_compact_ipv6_peers (line 624) | fn parse_compact_ipv6_peers(bytes: &[u8]) -> Result, Tra... function fixed_width_bytes (line 643) | fn fixed_width_bytes(bytes: &[u8], len: usize) -> Vec { function udp_event_code (line 650) | fn udp_event_code(event: Option) -> u32 { function tracker_scheme (line 659) | fn tracker_scheme(url: &str) -> Result { type TrackerScheme (line 671) | enum TrackerScheme { function encode_url_nn (line 676) | fn encode_url_nn(param: &[u8]) -> String { function parse_http_tracker_response_supports_ipv6_compact_peers (line 714) | async fn parse_http_tracker_response_supports_ipv6_compact_peers() { function parse_http_tracker_response_resolves_hostname_dict_peers (line 731) | async fn parse_http_tracker_response_resolves_hostname_dict_peers() { function resolve_tracker_peer_hostname_timeout_returns_empty (line 749) | async fn resolve_tracker_peer_hostname_timeout_returns_empty() { function resolve_udp_tracker_addrs_timeout_returns_protocol_error (line 768) | async fn resolve_udp_tracker_addrs_timeout_returns_protocol_error() { function retry_udp_announce_across_addrs_tries_next_address_before_retrying_first (line 788) | async fn retry_udp_announce_across_addrs_tries_next_address_before_retry... function parse_compact_ipv4_peers_rejects_trailing_bytes (line 827) | fn parse_compact_ipv4_peers_rejects_trailing_bytes() { function parse_compact_ipv6_peers_rejects_trailing_bytes (line 834) | fn parse_compact_ipv6_peers_rejects_trailing_bytes() { function classify_http_tracker_error_surfaces_html_response_context (line 844) | fn classify_http_tracker_error_surfaces_html_response_context() { function format_content_type_suffix_omits_missing_header (line 859) | fn format_content_type_suffix_omits_missing_header() { function announce_started_supports_udp_trackers (line 864) | async fn announce_started_supports_udp_trackers() { function announce_completed_sends_udp_completed_event_and_zero_numwant (line 926) | async fn announce_completed_sends_udp_completed_event_and_zero_numwant() { function announce_started_retries_udp_with_fresh_socket_after_timeout (line 985) | async fn announce_started_retries_udp_with_fresh_socket_after_timeout() { FILE: src/tracker/mod.rs type TrackerEvent (line 15) | pub enum TrackerEvent { method fmt (line 21) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { type TrackerResponse (line 31) | pub struct TrackerResponse { type PeerDictModel (line 43) | struct PeerDictModel { type Peers (line 50) | enum Peers { type RawTrackerResponse (line 56) | struct RawTrackerResponse { function normalize_tracker_urls (line 77) | pub fn normalize_tracker_urls(urls: I) -> Vec function normalize_tracker_urls_keeps_http_tracker_when_udp_matches (line 112) | fn normalize_tracker_urls_keeps_http_tracker_when_udp_matches() { function normalize_tracker_urls_keeps_distinct_tracker_paths (line 130) | fn normalize_tracker_urls_keeps_distinct_tracker_paths() { function normalize_tracker_urls_keeps_authenticated_http_tracker_alongside_udp (line 146) | fn normalize_tracker_urls_keeps_authenticated_http_tracker_alongside_udp... function normalize_tracker_urls_keeps_credentialed_http_tracker_alongside_udp (line 162) | fn normalize_tracker_urls_keeps_credentialed_http_tracker_alongside_udp() { FILE: src/tui/effects.rs function compute_effects_activity_speed_multiplier (line 9) | pub(crate) fn compute_effects_activity_speed_multiplier( function apply_theme_effects_to_frame (line 35) | pub(crate) fn apply_theme_effects_to_frame(f: &mut Frame, ctx: &ThemeCon... FILE: src/tui/events.rs function handle_event (line 20) | pub async fn handle_event(event: CrosstermEvent, app: &mut App) { function flush_pending_paste_burst (line 24) | pub async fn flush_pending_paste_burst(app: &mut App) { function handle_event_at (line 28) | async fn handle_event_at(event: CrosstermEvent, app: &mut App, now: Inst... function flush_pending_paste_burst_at (line 40) | async fn flush_pending_paste_burst_at(app: &mut App, now: Instant) { function translate_event (line 52) | fn translate_event(event: CrosstermEvent, app: &mut App, now: Instant) -... function flush_due_events (line 81) | fn flush_due_events(app: &mut App, now: Instant) -> Vec { function convert_burst_flush (line 90) | fn convert_burst_flush(flush: PasteBurstFlushResult) -> Vec bool { function should_ignore_event_for_paste_burst (line 107) | fn should_ignore_event_for_paste_burst(event: &CrosstermEvent) -> bool { function apply_event (line 117) | async fn apply_event(event: CrosstermEvent, app: &mut App) { function should_quit_on_ctrl_c (line 139) | fn should_quit_on_ctrl_c(event: &CrosstermEvent, app: &mut App) -> bool { function handle_resize_event (line 153) | fn handle_resize_event(event: &CrosstermEvent, app: &mut App) -> bool { function should_debounce_escape (line 162) | fn should_debounce_escape(event: &CrosstermEvent) -> bool { function dispatch_mode_event (line 181) | async fn dispatch_mode_event(event: CrosstermEvent, app: &mut App) { function create_mock_metrics (line 239) | fn create_mock_metrics(peer_count: usize) -> TorrentMetrics { function create_mock_display_state (line 253) | fn create_mock_display_state(peer_count: usize) -> TorrentDisplayState { function create_test_app_state (line 261) | fn create_test_app_state() -> AppState { function build_test_app (line 285) | async fn build_test_app() -> App { function test_nav_down_torrents (line 297) | fn test_nav_down_torrents() { function test_nav_up_torrents (line 309) | fn test_nav_up_torrents() { function test_nav_down_peers (line 321) | fn test_nav_down_peers() { function test_nav_right_to_peers_when_peers_exist (line 334) | fn test_nav_right_to_peers_when_peers_exist() { function test_nav_right_to_peers_when_no_peers (line 348) | fn test_nav_right_to_peers_when_no_peers() { function test_nav_left_from_peers (line 362) | fn test_nav_left_from_peers() { function test_nav_up_peers (line 376) | fn test_nav_up_peers() { function test_nav_up_at_top_of_list (line 389) | fn test_nav_up_at_top_of_list() { function test_nav_down_at_bottom_of_list (line 401) | fn test_nav_down_at_bottom_of_list() { function test_nav_up_peers_at_top_of_list (line 413) | fn test_nav_up_peers_at_top_of_list() { function test_nav_down_peers_at_bottom_of_list (line 426) | fn test_nav_down_peers_at_bottom_of_list() { function test_nav_right_jumps_to_peers_when_only_name_column_visible (line 439) | fn test_nav_right_jumps_to_peers_when_only_name_column_visible() { function test_apply_priority_action_cycles_target_and_children (line 464) | fn test_apply_priority_action_cycles_target_and_children() { function test_apply_priority_action_returns_false_for_missing_path (line 487) | fn test_apply_priority_action_returns_false_for_missing_path() { function test_escape_debounce_ignores_non_escape_keys (line 503) | fn test_escape_debounce_ignores_non_escape_keys() { function test_escape_debounce_blocks_rapid_second_escape (line 510) | fn test_escape_debounce_blocks_rapid_second_escape() { function single_shortcut_replays_after_burst_timeout (line 519) | async fn single_shortcut_replays_after_burst_timeout() { function supported_burst_flushes_as_synthetic_paste (line 537) | async fn supported_burst_flushes_as_synthetic_paste() { function welcome_screen_paste_burst_flushes_as_synthetic_paste (line 563) | async fn welcome_screen_paste_burst_flushes_as_synthetic_paste() { function unsupported_burst_replays_original_keys (line 590) | async fn unsupported_burst_replays_original_keys() { function explicit_paste_bypasses_pending_burst (line 615) | async fn explicit_paste_bypasses_pending_burst() { function explicit_paste_on_welcome_screen_is_ignored (line 641) | async fn explicit_paste_on_welcome_screen_is_ignored() { function release_events_are_ignored_by_translation (line 659) | async fn release_events_are_ignored_by_translation() { FILE: src/tui/formatters.rs function format_speed (line 17) | pub fn format_speed(bits_per_second: u64) -> String { function format_bytes (line 29) | pub fn format_bytes(bytes: u64) -> String { function format_memory (line 48) | pub fn format_memory(bytes: u64) -> String { function format_time (line 64) | pub fn format_time(seconds: u64) -> String { function format_duration (line 90) | pub fn format_duration(duration: Duration) -> String { function centered_rect (line 130) | pub fn centered_rect(percent_x: u16, percent_y: u16, r: Rect) -> Rect { function path_to_string (line 150) | pub fn path_to_string(path: Option<&Path>) -> String { function ip_to_color (line 155) | pub fn ip_to_color(ctx: &ThemeContext, ip: &str) -> Color { function speed_to_style (line 166) | pub fn speed_to_style(ctx: &ThemeContext, speed_bps: u64) -> Style { function truncate_with_ellipsis (line 191) | pub fn truncate_with_ellipsis(s: &str, max_len: usize) -> String { function calculate_nice_upper_bound (line 201) | pub fn calculate_nice_upper_bound(speed_bps: u64) -> u64 { function format_countdown (line 243) | pub fn format_countdown(duration: Duration) -> String { function format_limit_bps (line 267) | pub fn format_limit_bps(bps: u64) -> String { function format_graph_time_label (line 275) | pub fn format_graph_time_label(duration_secs: usize) -> String { function generate_x_axis_labels (line 291) | pub fn generate_x_axis_labels( function parse_peer_id (line 350) | pub fn parse_peer_id(peer_id: &[u8]) -> String { function format_latency (line 392) | pub fn format_latency(duration: Duration) -> String { function format_iops (line 403) | pub fn format_iops(iops: u32) -> String { function sanitize_text (line 407) | pub fn sanitize_text(text: &str) -> String { FILE: src/tui/layout/browser.rs type FileBrowserLayout (line 8) | pub struct FileBrowserLayout { function calculate_file_browser_layout (line 20) | pub fn calculate_file_browser_layout( FILE: src/tui/layout/common.rs type ColumnId (line 10) | pub enum ColumnId { type ColumnDefinition (line 17) | pub struct ColumnDefinition { function get_torrent_columns (line 26) | pub fn get_torrent_columns() -> Vec { function torrent_has_download_activity (line 63) | pub fn torrent_has_download_activity(app_state: &AppState) -> bool { function torrent_has_upload_activity (line 70) | pub fn torrent_has_upload_activity(app_state: &AppState) -> bool { function has_incomplete_torrents (line 77) | pub fn has_incomplete_torrents(app_state: &AppState) -> bool { function has_unavailable_torrents (line 84) | pub fn has_unavailable_torrents(app_state: &AppState) -> bool { function active_torrent_column_indices (line 91) | pub fn active_torrent_column_indices(app_state: &AppState) -> Vec { function compute_visible_torrent_columns (line 112) | pub fn compute_visible_torrent_columns( type PeerColumnId (line 142) | pub enum PeerColumnId { type PeerColumnDefinition (line 152) | pub struct PeerColumnDefinition { function get_peer_columns (line 161) | pub fn get_peer_columns() -> Vec { function peer_has_download_activity (line 222) | pub fn peer_has_download_activity(app_state: &AppState) -> bool { function peer_has_upload_activity (line 236) | pub fn peer_has_upload_activity(app_state: &AppState) -> bool { function active_peer_column_indices (line 250) | pub fn active_peer_column_indices(app_state: &AppState) -> Vec { function compute_visible_peer_columns (line 272) | pub fn compute_visible_peer_columns( type SmartCol (line 302) | pub struct SmartCol { function compute_smart_table_layout (line 308) | pub fn compute_smart_table_layout( function peer_test_app_state (line 368) | fn peer_test_app_state() -> AppState { function peer_address_column_reserves_more_width_for_ipv6_addresses (line 397) | fn peer_address_column_reserves_more_width_for_ipv6_addresses() { function peer_columns_drop_low_priority_fields_before_address_on_medium_widths (line 409) | fn peer_columns_drop_low_priority_fields_before_address_on_medium_widths... function peer_columns_hide_dl_and_ul_when_selected_torrent_has_no_activity (line 422) | fn peer_columns_hide_dl_and_ul_when_selected_torrent_has_no_activity() { function peer_columns_show_only_active_direction (line 431) | fn peer_columns_show_only_active_direction() { function torrent_columns_hide_inactive_speed_columns (line 443) | fn torrent_columns_hide_inactive_speed_columns() { function torrent_columns_show_only_active_speed_direction (line 451) | fn torrent_columns_show_only_active_speed_direction() { function torrent_columns_show_done_when_torrent_is_incomplete (line 463) | fn torrent_columns_show_done_when_torrent_is_incomplete() { function torrent_columns_show_done_when_torrent_data_is_unavailable (line 477) | fn torrent_columns_show_done_when_torrent_data_is_unavailable() { FILE: src/tui/layout/normal.rs constant MIN_SIDEBAR_WIDTH (line 7) | pub const MIN_SIDEBAR_WIDTH: u16 = 25; constant MIN_DETAILS_HEIGHT (line 8) | pub const MIN_DETAILS_HEIGHT: u16 = 10; constant DEFAULT_SIDEBAR_PERCENT (line 9) | pub const DEFAULT_SIDEBAR_PERCENT: u16 = 45; type LayoutPlan (line 12) | pub struct LayoutPlan { type LayoutContext (line 24) | pub struct LayoutContext { method new (line 31) | pub fn new(area: Rect, _app_state: &AppState, sidebar_pct: u16) -> Self { function calculate_layout (line 40) | pub fn calculate_layout(area: Rect, ctx: &LayoutContext) -> LayoutPlan { FILE: src/tui/particles.rs constant BLACK_HOLE_Y_ASPECT (line 12) | const BLACK_HOLE_Y_ASPECT: f64 = 2.0; function apply_theme_particles_background_to_frame (line 14) | pub(crate) fn apply_theme_particles_background_to_frame(f: &mut Frame, c... function apply_theme_particles_foreground_to_frame (line 22) | pub(crate) fn apply_theme_particles_foreground_to_frame(f: &mut Frame, c... function render_particles (line 30) | fn render_particles( type BlackHoleBurst (line 90) | struct BlackHoleBurst { type ParticleField (line 103) | struct ParticleField { method sample (line 112) | fn sample<'a>( type ParticleSample (line 134) | struct ParticleSample<'a> { function render_black_hole_particles (line 144) | fn render_black_hole_particles( function black_hole_burst_state (line 244) | fn black_hole_burst_state(width: f64, height: f64, phase: f64) -> BlackH... function sample_particle (line 280) | fn sample_particle(sample: ParticleSample<'_>) -> Option<(&'static str, ... function sample_diamond (line 291) | fn sample_diamond(sample: ParticleSample<'_>) -> Option<(&'static str, C... function sample_sakura (line 428) | fn sample_sakura(sample: ParticleSample<'_>) -> Option<(&'static str, Co... function sample_matrix (line 477) | fn sample_matrix(sample: ParticleSample<'_>) -> Option<(&'static str, Co... function sample_bioluminescent_reef (line 553) | fn sample_bioluminescent_reef(sample: ParticleSample<'_>) -> Option<(&'s... function hash01 (line 642) | fn hash01(x: f64, y: f64, phase: f64, salt: f64) -> f64 { function glow_color (line 647) | fn glow_color(base: Color, highlight: Color, amount: f64) -> Color { function color_from_hsv (line 655) | fn color_from_hsv(h: f64, s: f64, v: f64) -> Color { FILE: src/tui/paste_burst.rs constant PASTE_BURST_CHAR_INTERVAL (line 8) | const PASTE_BURST_CHAR_INTERVAL: Duration = Duration::from_millis(8); constant PASTE_BURST_CHAR_INTERVAL (line 10) | const PASTE_BURST_CHAR_INTERVAL: Duration = Duration::from_millis(30); type PasteBurst (line 13) | pub struct PasteBurst { method next_deadline (line 27) | pub fn next_deadline(&self) -> Option { method has_pending (line 32) | pub fn has_pending(&self) -> bool { method push_key (line 36) | pub fn push_key(&mut self, key: KeyEvent, now: Instant) -> FlushResult { method flush_if_due (line 59) | pub fn flush_if_due(&mut self, now: Instant, should_treat_as_paste:... method flush_now (line 72) | pub fn flush_now(&mut self, should_treat_as_paste: F) -> FlushResult method clear (line 79) | pub fn clear(&mut self) { method finish_flush (line 85) | fn finish_flush(&mut self, should_treat_as_paste: F) -> FlushResult method drain_as_keys (line 104) | fn drain_as_keys(&mut self) -> FlushResult { method flush_delay (line 117) | pub fn flush_delay() -> Duration { type FlushResult (line 19) | pub enum FlushResult { function single_key_flushes_as_keys_when_not_paste (line 128) | fn single_key_flushes_as_keys_when_not_paste() { function magnet_like_burst_flushes_as_text (line 139) | fn magnet_like_burst_flushes_as_text() { function interruption_flushes_pending_keys_without_leaking_state (line 157) | fn interruption_flushes_pending_keys_without_leaking_state() { FILE: src/tui/screen_context.rs type AppViewModel (line 9) | pub struct AppViewModel<'a> { function new (line 14) | pub fn new(state: &'a AppState) -> Self { type ScreenContext (line 19) | pub struct ScreenContext<'a> { function new (line 29) | pub fn new( FILE: src/tui/screens/browser.rs constant ASCII_TREE_DIR_ICON (line 23) | const ASCII_TREE_DIR_ICON: &str = "> "; constant ASCII_TREE_FILE_ICON (line 24) | const ASCII_TREE_FILE_ICON: &str = " "; constant ASCII_TREE_ROOT_ICON (line 25) | const ASCII_TREE_ROOT_ICON: &str = "> "; type DownloadConfirmPayload (line 27) | pub struct DownloadConfirmPayload { function draw (line 33) | pub fn draw( function draw_torrent_preview_panel (line 335) | fn draw_torrent_preview_panel( function handle_event (line 662) | pub async fn handle_event(event: CrosstermEvent, app: &mut App) { function handle_browser_search_key (line 682) | fn handle_browser_search_key(key_code: KeyCode, app: &mut App) -> bool { function handle_browser_download_key (line 699) | async fn handle_browser_download_key(key_code: KeyCode, app: &mut App) -... function handle_browser_common_key (line 773) | async fn handle_browser_common_key(key_code: KeyCode, app: &mut App) -> ... type ConfirmDecision (line 832) | pub enum ConfirmDecision { type BrowserAction (line 840) | pub enum BrowserAction { type BrowserReduceResult (line 848) | pub struct BrowserReduceResult { type BrowserFsAction (line 853) | pub enum BrowserFsAction { type BrowserFsEffect (line 860) | pub enum BrowserFsEffect { type BrowserFsReduceResult (line 868) | pub struct BrowserFsReduceResult { type BrowserDialogAction (line 874) | pub enum BrowserDialogAction { type BrowserDialogEffect (line 880) | pub enum BrowserDialogEffect { type BrowserTransition (line 889) | pub enum BrowserTransition { type BrowserDialogReduceResult (line 894) | pub struct BrowserDialogReduceResult { type BrowserDownloadEditAction (line 899) | pub enum BrowserDownloadEditAction { type BrowserDownloadEditReduceResult (line 910) | pub struct BrowserDownloadEditReduceResult { type BrowserDownloadShortcutAction (line 915) | pub enum BrowserDownloadShortcutAction { type BrowserDownloadShortcutReduceResult (line 921) | pub struct BrowserDownloadShortcutReduceResult { type BrowserDownloadAction (line 926) | pub enum BrowserDownloadAction { type BrowserDownloadReduceResult (line 931) | pub struct BrowserDownloadReduceResult { type BrowserPreviewAction (line 936) | pub enum BrowserPreviewAction { type BrowserPreviewReduceResult (line 943) | pub struct BrowserPreviewReduceResult { type BrowserFilesystemNavContext (line 947) | pub struct BrowserFilesystemNavContext<'a> { function map_search_key_to_browser_action (line 957) | fn map_search_key_to_browser_action( function reduce_browser_action (line 974) | pub fn reduce_browser_action( function map_filesystem_key_to_action (line 999) | fn map_filesystem_key_to_action(key_code: KeyCode) -> Option BrowserDow... function map_download_key_to_action (line 1076) | pub fn map_download_key_to_action( function reduce_download_name_edit_action (line 1099) | pub fn reduce_download_name_edit_action( function map_download_shortcut_key_to_action (line 1144) | fn map_download_shortcut_key_to_action( function reduce_download_shortcut_action (line 1156) | pub fn reduce_download_shortcut_action( function reduce_browser_download_action (line 1186) | pub fn reduce_browser_download_action( function has_preview_content (line 1231) | pub fn has_preview_content( function focused_pane (line 1248) | pub fn focused_pane(browser_mode: &FileBrowserMode) -> BrowserPane { function calculate_area (line 1256) | pub fn calculate_area(screen: Rect, has_preview_content: bool) -> Rect { function calculate_list_height (line 1270) | pub fn calculate_list_height( function calculate_preview_list_height (line 1282) | pub fn calculate_preview_list_height( function map_preview_key_to_action (line 1301) | pub fn map_preview_key_to_action(key_code: KeyCode) -> BrowserPreviewAct... function reduce_browser_preview_action (line 1313) | pub fn reduce_browser_preview_action( function build_filter (line 1345) | pub fn build_filter( function handle_filesystem_navigation (line 1362) | pub fn handle_filesystem_navigation( function reduce_browser_dialog_action (line 1397) | pub fn reduce_browser_dialog_action( function execute_browser_dialog_effects (line 1456) | pub async fn execute_browser_dialog_effects(app: &mut App, effects: Vec<... function apply_browser_transition (line 1490) | fn apply_browser_transition(app: &mut App, transition: BrowserTransition) { function confirm_config_path_selection (line 1497) | pub fn confirm_config_path_selection( function escape_to_config_mode (line 1529) | pub fn escape_to_config_mode(browser_mode: &FileBrowserMode) -> Option Option { type ConfigReduceResult (line 52) | pub struct ConfigReduceResult { function shared_path_is_manual (line 57) | fn shared_path_is_manual(item: ConfigItem) -> bool { function map_key_to_config_action (line 60) | fn map_key_to_config_action( function reduce_config_action (line 86) | pub fn reduce_config_action( function draw (line 270) | pub fn draw( function handle_event (line 428) | pub fn handle_event(event: CrosstermEvent, ctx: ConfigHandleContext<'_>)... function config_items (line 474) | fn config_items() -> Vec { function reducer_move_down_is_clamped (line 485) | fn reducer_move_down_is_clamped() { function reducer_edit_commit_updates_download_limit_and_emits_effect (line 505) | fn reducer_edit_commit_updates_download_limit_and_emits_effect() { function reducer_save_and_exit_emits_update_config_command (line 526) | fn reducer_save_and_exit_emits_update_config_command() { FILE: src/tui/screens/delete_confirm.rs type DeleteConfirmAction (line 14) | pub enum DeleteConfirmAction { type DeleteConfirmEffect (line 20) | pub enum DeleteConfirmEffect { type DeleteConfirmReduceResult (line 32) | pub struct DeleteConfirmReduceResult { function map_key_to_delete_confirm_action (line 37) | fn map_key_to_delete_confirm_action(key_code: KeyCode) -> Option) { function handle_event (line 189) | pub fn handle_event(event: CrosstermEvent, app: &mut App) -> bool { function keymap_uses_shift_y_for_confirm (line 234) | fn keymap_uses_shift_y_for_confirm() { function reducer_cancel_closes_without_effects (line 243) | fn reducer_cancel_closes_without_effects() { function reducer_confirm_emits_command_and_mark_deleting (line 251) | fn reducer_confirm_emits_command_and_mark_deleting() { FILE: src/tui/screens/help.rs function display_path_or_disabled (line 17) | fn display_path_or_disabled(path: Option) -> String { function build_help_footer_entries (line 22) | fn build_help_footer_entries( function draw_help_footer (line 75) | fn draw_help_footer( type HelpAction (line 108) | pub enum HelpAction { type HelpEffect (line 113) | pub enum HelpEffect { type HelpReduceResult (line 118) | pub struct HelpReduceResult { function map_key_to_help_action (line 123) | fn map_key_to_help_action(key_code: KeyCode, key_kind: KeyEventKind) -> ... function reduce_help_action (line 132) | pub fn reduce_help_action(action: HelpAction) -> HelpReduceResult { function execute_help_effects (line 141) | pub fn execute_help_effects(app_state: &mut AppState, effects: Vec) { function draw_help_table (line 206) | fn draw_help_table(f: &mut Frame, app_state: &AppState, area: Rect, ctx:... function help_esc_returns_to_normal (line 778) | fn help_esc_returns_to_normal() { function help_m_press_returns_to_normal (line 793) | fn help_m_press_returns_to_normal() { function help_ignores_non_close_key (line 808) | fn help_ignores_non_close_key() { function help_handler_ignores_when_not_in_help_mode (line 823) | fn help_handler_ignores_when_not_in_help_mode() { function help_footer_includes_cluster_entries_when_present (line 838) | fn help_footer_includes_cluster_entries_when_present() { function help_footer_omits_cluster_entries_when_absent (line 853) | fn help_footer_omits_cluster_entries_when_absent() { FILE: src/tui/screens/journal.rs constant JOURNAL_CLOSE_KEYS_LABEL (line 18) | const JOURNAL_CLOSE_KEYS_LABEL: &str = "Esc / q"; constant JOURNAL_FILTER_KEYS_LABEL (line 19) | const JOURNAL_FILTER_KEYS_LABEL: &str = "Tab / Shift+Tab"; constant JOURNAL_MOVE_KEYS_LABEL (line 20) | const JOURNAL_MOVE_KEYS_LABEL: &str = "Up / Down / k / j"; constant JOURNAL_REPLAY_KEYS_LABEL (line 21) | const JOURNAL_REPLAY_KEYS_LABEL: &str = "Shift+Y"; constant JOURNAL_CLOSE_DESCRIPTION (line 22) | const JOURNAL_CLOSE_DESCRIPTION: &str = "Close the event journal"; constant JOURNAL_FILTER_DESCRIPTION (line 23) | const JOURNAL_FILTER_DESCRIPTION: &str = "Cycle between ALL, QUEUE, COMM... constant JOURNAL_MOVE_DESCRIPTION (line 24) | const JOURNAL_MOVE_DESCRIPTION: &str = "Move selection through journal e... constant JOURNAL_REPLAY_DESCRIPTION (line 25) | const JOURNAL_REPLAY_DESCRIPTION: &str = type JournalAction (line 29) | enum JournalAction { function map_key_to_journal_action (line 38) | fn map_key_to_journal_action(key_code: KeyCode, key_kind: KeyEventKind) ... function handle_event (line 54) | pub fn handle_event( function entry_matches_filter (line 98) | fn entry_matches_filter(entry: &EventJournalEntry, filter: JournalFilter... function filtered_entries (line 107) | fn filtered_entries(app_state: &AppState) -> Vec<&EventJournalEntry> { function event_type_label (line 117) | fn event_type_label(entry: &EventJournalEntry) -> &'static str { function command_action_label (line 133) | fn command_action_label(entry: &EventJournalEntry) -> String { function source_label (line 140) | fn source_label(entry: &EventJournalEntry, anonymize: bool) -> String { function torrent_label (line 158) | fn torrent_label(entry: &EventJournalEntry, anonymize: bool) -> String { function live_completion_percent (line 170) | fn live_completion_percent(entry: &EventJournalEntry, app_state: &AppSta... function progress_label (line 194) | fn progress_label(entry: &EventJournalEntry, app_state: &AppState) -> St... function preferred_source_text (line 200) | fn preferred_source_text(entry: &EventJournalEntry) -> Option { function pretty_timestamp (line 213) | fn pretty_timestamp(ts_iso: &str) -> String { function compact_path_label (line 223) | fn compact_path_label(path: &Path, depth: usize) -> String { function detail_text (line 247) | fn detail_text(entry: Option<&EventJournalEntry>, anonymize: bool) -> St... function selected_detail_text (line 275) | fn selected_detail_text(app_state: &AppState, entry: Option<&EventJourna... function journal_help_rows (line 292) | pub fn journal_help_rows(ctx: &ThemeContext) -> Vec> { function replay_command_for_path (line 325) | fn replay_command_for_path(path: &Path) -> Option { function replay_selected_entry (line 340) | fn replay_selected_entry(app_state: &mut AppState, app_command_tx: &mpsc... type JournalColumn (line 377) | enum JournalColumn { function columns_for_filter (line 385) | fn columns_for_filter(filter: JournalFilter) -> Vec { function column_header (line 416) | fn column_header(column: JournalColumn) -> &'static str { function column_constraint (line 426) | fn column_constraint(column: JournalColumn, filter: JournalFilter) -> Co... function column_cell (line 440) | fn column_cell( function draw (line 463) | pub fn draw(f: &mut Frame, screen: &ScreenContext<'_>) { function base_state (line 657) | fn base_state() -> AppState { function tab_cycles_filters (line 692) | fn tab_cycles_filters() { function filter_selection_matches_requested_groups (line 712) | fn filter_selection_matches_requested_groups() { function compact_path_label_keeps_tail_components (line 732) | fn compact_path_label_keeps_tail_components() { function pretty_timestamp_formats_rfc3339_values (line 738) | fn pretty_timestamp_formats_rfc3339_values() { function progress_label_uses_live_torrent_metrics_when_info_hash_matches (line 744) | fn progress_label_uses_live_torrent_metrics_when_info_hash_matches() { function anonymized_journal_hides_torrent_names_and_paths (line 767) | fn anonymized_journal_hides_torrent_names_and_paths() { function selected_detail_text_prefers_recorded_source_path_over_live_magnet (line 788) | fn selected_detail_text_prefers_recorded_source_path_over_live_magnet() { function command_filter_uses_action_label_and_reduced_columns (line 813) | fn command_filter_uses_action_label_and_reduced_columns() { function health_filter_hides_source_column (line 840) | fn health_filter_hides_source_column() { function shift_y_replays_selected_magnet_source (line 849) | fn shift_y_replays_selected_magnet_source() { function shift_y_reports_missing_replay_source (line 880) | fn shift_y_reports_missing_replay_source() { FILE: src/tui/screens/normal.rs constant SECONDS_HISTORY_MAX (line 72) | const SECONDS_HISTORY_MAX: usize = 3600; constant MINUTES_HISTORY_MAX (line 73) | const MINUTES_HISTORY_MAX: usize = 48 * 60; constant TUNING_LABEL_WIDTH (line 74) | const TUNING_LABEL_WIDTH: usize = 14; constant FOOTER_STATUS_GUTTER (line 75) | const FOOTER_STATUS_GUTTER: u16 = 2; constant ASCII_TREE_DIR_ICON (line 76) | const ASCII_TREE_DIR_ICON: &str = "> "; constant ASCII_TREE_FILE_ICON (line 77) | const ASCII_TREE_FILE_ICON: &str = " "; constant FILE_ACTIVITY_HIGHLIGHT_WINDOW (line 78) | const FILE_ACTIVITY_HIGHLIGHT_WINDOW: Duration = Duration::from_millis(1... constant MIN_SWARM_AVAILABILITY_HEIGHT (line 79) | const MIN_SWARM_AVAILABILITY_HEIGHT: u16 = 1; constant FILES_SWARM_SPACER_HEIGHT (line 80) | const FILES_SWARM_SPACER_HEIGHT: u16 = 1; constant SATURATED_ACTIVE_PEER_FILE_ROWS (line 81) | const SATURATED_ACTIVE_PEER_FILE_ROWS: u16 = 5; constant MIN_SATURATED_ACTIVE_PEER_TABLE_HEIGHT (line 82) | const MIN_SATURATED_ACTIVE_PEER_TABLE_HEIGHT: u16 = 7; constant MAX_INACTIVE_ONLY_PEERS_IN_TABLE (line 83) | const MAX_INACTIVE_ONLY_PEERS_IN_TABLE: usize = 10; constant DISK_HEALTH_ORB_SIZE_SCALE (line 84) | const DISK_HEALTH_ORB_SIZE_SCALE: f64 = 1.35; constant DISK_HEALTH_ORB_CELL_Y_ASPECT (line 85) | const DISK_HEALTH_ORB_CELL_Y_ASPECT: f64 = 2.0; constant DISK_HEALTH_ORB_BRAILLE_BITS (line 86) | const DISK_HEALTH_ORB_BRAILLE_BITS: [[u8; 2]; 4] = function build_time_aligned_window (line 89) | fn build_time_aligned_window( type HistoryTier (line 121) | enum HistoryTier { function graph_window_spec (line 128) | fn graph_window_spec(mode: GraphDisplayMode) -> (usize, u64, HistoryTier) { function build_time_aligned_pair_window (line 152) | fn build_time_aligned_pair_window( function activity_points_for_tier (line 181) | fn activity_points_for_tier( function network_points_for_tier (line 193) | fn network_points_for_tier(app_state: &AppState, tier: HistoryTier) -> &... function disk_series_draw_read_last (line 202) | fn disk_series_draw_read_last(read: &[u64], write: &[u64]) -> bool { function torrent_activity_label (line 214) | fn torrent_activity_label(app_state: &AppState, info_hash: &[u8]) -> Str... function torrent_period_traffic (line 228) | fn torrent_period_traffic( function torrent_current_traffic (line 252) | fn torrent_current_traffic( function smoothed_last_value (line 278) | fn smoothed_last_value(data: &[u64], alpha: f64) -> u64 { function chart_hidden_legend_constraints (line 291) | fn chart_hidden_legend_constraints(view: ChartPanelView) -> (Constraint,... function chart_legend_position (line 302) | fn chart_legend_position(view: ChartPanelView) -> Option usize { function selector_window (line 317) | fn selector_window<'a>(labels: &'a [&'a str], active_idx: usize, compact... function selector_active_position (line 337) | fn selector_active_position(labels_len: usize, active_idx: usize, compac... function build_selector_spans (line 353) | fn build_selector_spans( function speed_chart_upper_bound (line 384) | fn speed_chart_upper_bound(max_displayed_speed: u64) -> u64 { type UiAction (line 395) | pub enum UiAction { type UiEffect (line 424) | pub enum UiEffect { type ReduceResult (line 441) | pub struct ReduceResult { function reduce_ui_action (line 446) | pub fn reduce_ui_action(app_state: &mut AppState, action: UiAction) -> R... function map_key_to_ui_action (line 728) | fn map_key_to_ui_action(key: KeyEvent) -> Option { function torrent_sort_column_uses_autosort (line 770) | fn torrent_sort_column_uses_autosort(column: TorrentSortColumn) -> bool { function peer_sort_column_uses_autosort (line 774) | fn peer_sort_column_uses_autosort(column: PeerSortColumn) -> bool { function draw (line 778) | pub fn draw(f: &mut Frame, screen: &ScreenContext<'_>, plan: &LayoutPlan) { type PeerFilesAreaLayout (line 810) | struct PeerFilesAreaLayout { type TorrentFilesRenderMode (line 818) | enum TorrentFilesRenderMode { type SwarmHeatmapFlash (line 824) | struct SwarmHeatmapFlash<'a> { type SwarmHeatmapLevel (line 831) | enum SwarmHeatmapLevel { type SwarmHeatmapFlashTone (line 839) | enum SwarmHeatmapFlashTone { type PeerTableRow (line 844) | enum PeerTableRow { function draw_peer_files_area (line 849) | fn draw_peer_files_area(f: &mut Frame, app_state: &AppState, area: Rect,... function torrent_peer_files_layout (line 881) | fn torrent_peer_files_layout(app_state: &AppState, area: Rect) -> Option... function peer_files_layout_with_swarm (line 914) | fn peer_files_layout_with_swarm( function saturated_active_peer_files_layout (line 944) | fn saturated_active_peer_files_layout( function peer_rows_are_all_active (line 980) | fn peer_rows_are_all_active(rows: &[PeerTableRow]) -> bool { function saturated_active_peer_files_height (line 988) | fn saturated_active_peer_files_height(torrent: &TorrentDisplayState) -> ... function selected_torrent (line 997) | fn selected_torrent(app_state: &AppState) -> Option<&TorrentDisplayState> { function selected_torrent_entry (line 1001) | fn selected_torrent_entry(app_state: &AppState) -> Option<(&[u8], &Torre... function swarm_heatmap_flash (line 1013) | fn swarm_heatmap_flash<'a>(app_state: &'a AppState, info_hash: &'a [u8])... type DhtWaveProfile (line 1022) | struct DhtWaveProfile { method from_signal (line 1031) | fn from_signal(signal: f64) -> Self { method from_inputs (line 1048) | fn from_inputs(_status: &DhtStatus, telemetry: &DhtWaveTelemetry) -> S... function dht_wave_query_signal (line 1053) | fn dht_wave_query_signal(telemetry: &DhtWaveTelemetry) -> f64 { function dht_wave_y_axis_bounds (line 1062) | fn dht_wave_y_axis_bounds(points: &[(f64, f64)]) -> [f64; 2] { function dht_wave_title_spans (line 1072) | fn dht_wave_title_spans( function dht_wave_title_width (line 1119) | fn dht_wave_title_width(spans: &[Span<'_>]) -> usize { function dht_wave_should_show_left_title (line 1123) | fn dht_wave_should_show_left_title(area_width: u16, right_title_width: u... function dht_power_scale_label (line 1131) | fn dht_power_scale_label(scale_halves: u8) -> String { constant DHT_PEER_YIELD_SIGNAL_SCALE (line 1139) | const DHT_PEER_YIELD_SIGNAL_SCALE: f64 = 256.0; function dht_peer_yield_signal (line 1141) | fn dht_peer_yield_signal(unique_peers_found_last_10s: usize) -> f64 { function dht_peer_yield_wave_points (line 1150) | fn dht_peer_yield_wave_points( function dht_peer_yield_draws_on_top (line 1178) | fn dht_peer_yield_draws_on_top(query_signal: f64, peer_yield_signal: f64... function draw_dht_wave_panel (line 1182) | fn draw_dht_wave_panel( function draw_status_error_popup (line 1308) | pub fn draw_status_error_popup(f: &mut Frame, error_text: &str, ctx: &Th... function draw_shutdown_screen (line 1352) | pub fn draw_shutdown_screen(f: &mut Frame, app_state: &AppState, ctx: &T... function truncate_theme_label_preserving_fx (line 1400) | pub(crate) fn truncate_theme_label_preserving_fx( function compute_footer_left_width (line 1433) | pub(crate) fn compute_footer_left_width(footer_width: u16, is_update: bo... function compute_footer_side_widths (line 1444) | pub(crate) fn compute_footer_side_widths( function compute_footer_status_width (line 1458) | pub(crate) fn compute_footer_status_width(client_port: u16, overall_port... function format_measured_fps (line 1463) | fn format_measured_fps(fps: f64) -> String { function footer_fps_label (line 1489) | pub(crate) fn footer_fps_label(app_state: &AppState) -> String { function estimate_footer_left_content_width (line 1505) | fn estimate_footer_left_content_width(app_state: &AppState, ctx: &ThemeC... function footer_command_len (line 1539) | fn footer_command_len(key: &str, suffix: &str) -> usize { function try_push_footer_command (line 1543) | fn try_push_footer_command( function draw_footer (line 1566) | pub fn draw_footer( function format_peer_address_for_table (line 1967) | fn format_peer_address_for_table(address: &str) -> String { function selected_torrent_has_peers (line 1975) | fn selected_torrent_has_peers(app_state: &AppState) -> bool { function nearest_visible_column (line 1983) | fn nearest_visible_column(visible_columns: &[usize], selected_column: us... function torrent_column_id_for_index (line 1991) | fn torrent_column_id_for_index(index: usize) -> Option { function peer_column_id_for_index (line 1995) | fn peer_column_id_for_index(index: usize) -> Option { function torrent_column_index (line 1999) | fn torrent_column_index(column_id: ColumnId) -> Option { function peer_column_index (line 2005) | fn peer_column_index(column_id: PeerColumnId) -> Option { function nearest_visible_torrent_column (line 2011) | fn nearest_visible_torrent_column( function nearest_visible_peer_column (line 2019) | fn nearest_visible_peer_column( function last_visible_torrent_column (line 2027) | fn last_visible_torrent_column(visible_columns: &[usize]) -> Option (&'static... function selected_torrent_critical_details (line 2626) | fn selected_torrent_critical_details( function draw_network_chart (line 2683) | pub fn draw_network_chart( function draw_stats_panel (line 3268) | pub fn draw_stats_panel( function build_tuning_numeric_line (line 3674) | fn build_tuning_numeric_line( function build_tuning_peer_line (line 3707) | fn build_tuning_peer_line( function rss_sync_countdown_label (line 3739) | fn rss_sync_countdown_label(next_sync_at: &str) -> Option { function peer_stream_smoothed_activity (line 3762) | fn peer_stream_smoothed_activity(data_slice: &[u64], i: usize) -> f64 { function peer_stream_wave_amplitude (line 3773) | fn peer_stream_wave_amplitude(smoothed_activity: f64) -> f64 { function draw_peer_stream (line 3780) | pub fn draw_peer_stream(f: &mut Frame, app_state: &AppState, area: Rect,... function should_use_compact_peer_stream_legend (line 4020) | fn should_use_compact_peer_stream_legend( function draw_block_stream_and_disk_orb (line 4033) | pub fn draw_block_stream_and_disk_orb( function should_insert_dht_between_blocks_and_disk (line 4078) | fn should_insert_dht_between_blocks_and_disk(screen_area: Rect, area: Re... type BlockStreamDiskLayoutMode (line 4085) | enum BlockStreamDiskLayoutMode { function block_stream_and_disk_layout_mode (line 4091) | fn block_stream_and_disk_layout_mode(screen_area: Rect, area: Rect) -> B... function draw_vertical_block_stream_panel (line 4113) | fn draw_vertical_block_stream_panel( function block_stream_title_color (line 4135) | fn block_stream_title_color(app_state: &AppState, ctx: &ThemeContext) ->... function draw_disk_health_panel (line 4175) | fn draw_disk_health_panel(f: &mut Frame, app_state: &AppState, area: Rec... function disk_health_state_word (line 4201) | fn disk_health_state_word(state_level: u8) -> &'static str { function disk_health_status_color (line 4210) | fn disk_health_status_color(ctx: &ThemeContext, state_level: u8) -> Color { function disk_health_title_color (line 4225) | fn disk_health_title_color(ctx: &ThemeContext, state_level: u8) -> Color { function disk_health_border_color (line 4229) | fn disk_health_border_color(ctx: &ThemeContext, state_level: u8) -> Color { function compute_throughput_gap (line 4236) | fn compute_throughput_gap(app_state: &AppState) -> f64 { type DiskHealthOrbLayout (line 4247) | struct DiskHealthOrbLayout { type DiskHealthOrbGeometry (line 4254) | struct DiskHealthOrbGeometry { function disk_health_orb_layout (line 4262) | fn disk_health_orb_layout(area: Rect) -> Option { function disk_health_orb_geometry (line 4299) | fn disk_health_orb_geometry(layout: DiskHealthOrbLayout) -> DiskHealthOr... function build_disk_health_orb_rows (line 4316) | fn build_disk_health_orb_rows( function draw_disk_health_orb (line 4382) | fn draw_disk_health_orb(f: &mut Frame, app_state: &AppState, area: Rect,... type DiskDeformProfile (line 4418) | struct DiskDeformProfile { function disk_health_deform_profile (line 4430) | fn disk_health_deform_profile(state_level: u8) -> DiskDeformProfile { function draw_vertical_block_stream_content (line 4483) | fn draw_vertical_block_stream_content( function should_render_download_inflow (line 4701) | fn should_render_download_inflow(metrics: &crate::app::TorrentMetrics) -... function render_sparkles (line 4706) | fn render_sparkles<'a>( function draw_peers_table (line 4726) | pub fn draw_peers_table( function draw_peers_table_without_swarm (line 4735) | fn draw_peers_table_without_swarm( function draw_peers_table_impl (line 4744) | fn draw_peers_table_impl( function peer_table_height_for_row_count (line 5006) | fn peer_table_height_for_row_count(row_count: usize) -> u16 { function displayed_peers_for_table (line 5014) | fn displayed_peers_for_table( function inactive_peer_summary_cells (line 5079) | fn inactive_peer_summary_cells( function compare_peer_table_rows (line 5107) | fn compare_peer_table_rows( function peer_is_inactive_for_table (line 5140) | fn peer_is_inactive_for_table(peer: &PeerInfo) -> bool { function draw_torrent_files_panel (line 5144) | pub fn draw_torrent_files_panel( function draw_torrent_files_panel_without_swarm (line 5153) | fn draw_torrent_files_panel_without_swarm( function draw_torrent_files_panel_impl (line 5163) | fn draw_torrent_files_panel_impl( function draw_torrent_files_frame (line 5250) | fn draw_torrent_files_frame(_f: &mut Frame, area: Rect, _ctx: &ThemeCont... function torrent_files_body_area (line 5258) | fn torrent_files_body_area(area: Rect) -> Rect { function torrent_files_panel_height_needed (line 5267) | fn torrent_files_panel_height_needed( function usize_to_u16_saturating (line 5284) | fn usize_to_u16_saturating(value: usize) -> u16 { function torrent_file_list_desired_row_count (line 5288) | fn torrent_file_list_desired_row_count( type TorrentFilesListRenderOptions (line 5327) | struct TorrentFilesListRenderOptions { function build_torrent_file_list_items (line 5336) | fn build_torrent_file_list_items( function build_torrent_file_tree_list_items (line 5362) | fn build_torrent_file_tree_list_items( type ActivitySortedFileRow (line 5537) | struct ActivitySortedFileRow { function build_activity_sorted_torrent_file_list_items (line 5543) | fn build_activity_sorted_torrent_file_list_items( function activity_sorted_file_count (line 5589) | fn activity_sorted_file_count(torrent: &TorrentDisplayState) -> usize { function activity_sorted_file_rows (line 5593) | fn activity_sorted_file_rows(torrent: &TorrentDisplayState) -> Vec String { function path_parent_prefix_len (line 5803) | fn path_parent_prefix_len(relative_path: &str) -> usize { function shaped_row_start_offsets (line 5810) | fn shaped_row_start_offsets(rows: &[String]) -> Vec { function file_tree_activity_paths (line 5823) | fn file_tree_activity_paths<'a>( type FileTreeNameRenderContext (line 5873) | struct FileTreeNameRenderContext<'a> { function render_file_tree_name_spans (line 5881) | fn render_file_tree_name_spans( function torrent_root_logical_len (line 5956) | fn torrent_root_logical_len(torrent: &TorrentDisplayState) -> usize { type FileActivityWaveProfile (line 5966) | struct FileActivityWaveProfile { function file_activity_wave_cycle_duration (line 5971) | fn file_activity_wave_cycle_duration(total_len: usize, wave: FileActivit... function file_activity_is_visible (line 5975) | fn file_activity_is_visible( function file_activity_wave_profile (line 5984) | fn file_activity_wave_profile(speed_bps: u64, text_len: usize) -> FileAc... function file_activity_wave_hits (line 6001) | fn file_activity_wave_hits( function file_activity_wave_phase_offset (line 6028) | fn file_activity_wave_phase_offset( function torrent_root_path_label (line 6047) | fn torrent_root_path_label(metrics: &crate::app::TorrentMetrics, anonymi... function split_path_components (line 6064) | fn split_path_components(path: &str) -> Vec { function path_separator (line 6072) | fn path_separator(path: &str) -> char { function path_root_prefix (line 6080) | fn path_root_prefix(path: &str, separator: char) -> Option<&'static str> { function append_path_component (line 6084) | fn append_path_component(base: &str, component: &str, separator: char) -... function render_path_slices (line 6094) | fn render_path_slices( function truncate_path_component (line 6119) | fn truncate_path_component(component: &str, width: usize) -> String { function middle_ellipsize_path (line 6123) | fn middle_ellipsize_path(path: &str, width: usize) -> String { function shape_root_path_for_viewport (line 6196) | fn shape_root_path_for_viewport(path: &str, width: usize, height: usize)... function anonymize_tree_name (line 6263) | fn anonymize_tree_name(name: &str, is_dir: bool, anonymize: bool) -> Str... function anonymize_preserving_shape (line 6272) | fn anonymize_preserving_shape(input: &str) -> String { function stable_string_seed (line 6281) | fn stable_string_seed(input: &str) -> u64 { function anonymized_shape_char (line 6290) | fn anonymized_shape_char(seed: u64, idx: usize, ch: char) -> char { function peer_has_all_pieces (line 6311) | fn peer_has_all_pieces(peer: &PeerInfo, total_pieces: usize) -> bool { function peer_has_piece (line 6322) | fn peer_has_piece(peer: &PeerInfo, piece_index: usize) -> bool { function swarm_heatmap_display_availability_counts (line 6326) | fn swarm_heatmap_display_availability_counts( function swarm_heatmap_level (line 6349) | fn swarm_heatmap_level(count: u32, max_avail: u32) -> SwarmHeatmapLevel { function swarm_heatmap_flash_peer (line 6371) | fn swarm_heatmap_flash_peer( function swarm_heatmap_flash_color (line 6390) | fn swarm_heatmap_flash_color( function swarm_heatmap_flash_tone (line 6407) | fn swarm_heatmap_flash_tone( function draw_swarm_heatmap (line 6418) | fn draw_swarm_heatmap( function handle_navigation (line 6590) | pub(crate) fn handle_navigation(app_state: &mut AppState, key_code: KeyC... function handle_search_key (line 6738) | fn handle_search_key(key_code: KeyCode, app: &mut App) -> bool { type PastedContent (line 6769) | enum PastedContent<'a> { function classify_pasted_text (line 6775) | fn classify_pasted_text(pasted_text: &str) -> PastedContent<'_> { function accepts_pasted_text (line 6789) | pub fn accepts_pasted_text(pasted_text: &str) -> bool { function handle_pasted_text (line 6796) | async fn handle_pasted_text(app: &mut App, pasted_text: &str) { function handle_event (line 6868) | pub async fn handle_event(event: CrosstermEvent, app: &mut App) { function handle_key_press (line 6879) | async fn handle_key_press(key: KeyEvent, app: &mut App) -> bool { function handle_reducer_key (line 6891) | async fn handle_reducer_key(key: KeyEvent, app: &mut App) -> bool { function handle_paste_text (line 6903) | async fn handle_paste_text(text: String, app: &mut App) -> bool { function execute_ui_effects (line 6912) | async fn execute_ui_effects(app: &mut App, effects: Vec) { function execute_ui_effect (line 6918) | async fn execute_ui_effect(app: &mut App, effect: UiEffect) { function create_mock_metrics (line 7036) | fn create_mock_metrics(peer_count: usize) -> TorrentMetrics { function create_mock_display_state (line 7054) | fn create_mock_display_state(peer_count: usize) -> TorrentDisplayState { function create_test_app_state (line 7061) | fn create_test_app_state() -> AppState { function peer_address_formatter_omits_ipv6_brackets_in_table (line 7083) | fn peer_address_formatter_omits_ipv6_brackets_in_table() { function reducer_start_search_sets_search_and_resets_selection (line 7095) | fn reducer_start_search_sets_search_and_resets_selection() { function reducer_start_search_keeps_browser_search_state_intact (line 7108) | fn reducer_start_search_keeps_browser_search_state_intact() { function reducer_clear_system_error_clears_error (line 7122) | fn reducer_clear_system_error_clears_error() { function reducer_navigate_updates_selection (line 7135) | fn reducer_navigate_updates_selection() { function reducer_toggle_anonymize_names_flips_flag (line 7148) | fn reducer_toggle_anonymize_names_flips_flag() { function reducer_toggle_torrent_files_flips_flag (line 7160) | fn reducer_toggle_torrent_files_flips_flag() { function peer_table_shows_more_inactive_peers_when_no_active_peers_exist (line 7172) | fn peer_table_shows_more_inactive_peers_when_no_active_peers_exist() { function peer_table_keeps_active_peers_and_summarizes_inactive (line 7191) | fn peer_table_keeps_active_peers_and_summarizes_inactive() { function swarm_heatmap_uses_empty_and_scaled_levels (line 7228) | fn swarm_heatmap_uses_empty_and_scaled_levels() { function swarm_heatmap_flash_tone_uses_regular_flash_for_non_empty_cells (line 7237) | fn swarm_heatmap_flash_tone_uses_regular_flash_for_non_empty_cells() { function swarm_heatmap_flash_peer_prefers_active_non_complete_peer_with_piece (line 7261) | fn swarm_heatmap_flash_peer_prefers_active_non_complete_peer_with_piece() { function swarm_heatmap_flash_peer_falls_back_to_stable_address_order (line 7288) | fn swarm_heatmap_flash_peer_falls_back_to_stable_address_order() { function swarm_heatmap_flash_color_uses_white_for_inactive_peer (line 7308) | fn swarm_heatmap_flash_color_uses_white_for_inactive_peer() { function swarm_heatmap_flash_color_uses_ip_color_for_active_peer (line 7322) | fn swarm_heatmap_flash_color_uses_ip_color_for_active_peer() { function swarm_heatmap_ignores_complete_peers_for_display_levels (line 7337) | fn swarm_heatmap_ignores_complete_peers_for_display_levels() { function swarm_heatmap_only_complete_peers_stays_empty_for_display_levels (line 7386) | fn swarm_heatmap_only_complete_peers_stays_empty_for_display_levels() { function peer_files_layout_gives_extra_space_to_swarm_when_files_fit (line 7410) | fn peer_files_layout_gives_extra_space_to_swarm_when_files_fit() { function peer_files_layout_keeps_adaptive_heatmap_when_files_are_limited (line 7436) | fn peer_files_layout_keeps_adaptive_heatmap_when_files_are_limited() { function peer_files_layout_falls_back_when_files_would_not_fit (line 7462) | fn peer_files_layout_falls_back_when_files_would_not_fit() { function peer_files_layout_reserves_files_when_active_peers_fill_area (line 7484) | fn peer_files_layout_reserves_files_when_active_peers_fill_area() { function peer_files_layout_skips_reserved_files_when_area_is_too_short (line 7516) | fn peer_files_layout_skips_reserved_files_when_area_is_too_short() { function peer_files_layout_reserves_only_existing_files_when_saturated (line 7544) | fn peer_files_layout_reserves_only_existing_files_when_saturated() { function peer_files_layout_can_show_files_without_peer_rows (line 7574) | fn peer_files_layout_can_show_files_without_peer_rows() { function torrent_files_body_area_uses_peer_table_horizontal_padding (line 7597) | fn torrent_files_body_area_uses_peer_table_horizontal_padding() { function torrent_files_panel_height_uses_needed_rows_until_limited (line 7605) | fn torrent_files_panel_height_uses_needed_rows_until_limited() { function split_path_components_handles_windows_paths (line 7631) | fn split_path_components_handles_windows_paths() { function split_path_components_handles_posix_paths (line 7639) | fn split_path_components_handles_posix_paths() { function middle_ellipsize_path_preserves_path_ends (line 7647) | fn middle_ellipsize_path_preserves_path_ends() { function middle_ellipsize_path_preserves_posix_root_and_separator (line 7656) | fn middle_ellipsize_path_preserves_posix_root_and_separator() { function torrent_root_path_label_uses_download_root_only (line 7665) | fn torrent_root_path_label_uses_download_root_only() { function anonymize_preserving_shape_keeps_length_and_structure (line 7682) | fn anonymize_preserving_shape_keeps_length_and_structure() { function torrent_root_path_label_anonymize_preserves_path_shape (line 7707) | fn torrent_root_path_label_anonymize_preserves_path_shape() { function shaped_row_start_offsets_account_for_hidden_path_separators (line 7730) | fn shaped_row_start_offsets_account_for_hidden_path_separators() { function file_activity_wave_hits_can_continue_across_adjacent_path_slices (line 7741) | fn file_activity_wave_hits_can_continue_across_adjacent_path_slices() { function file_activity_visibility_lingers_for_one_wave_cycle (line 7774) | fn file_activity_visibility_lingers_for_one_wave_cycle() { function file_activity_visibility_expires_after_wave_cycle_finishes (line 7788) | fn file_activity_visibility_expires_after_wave_cycle_finishes() { function shape_root_path_for_viewport_keeps_single_line_when_it_fits (line 7802) | fn shape_root_path_for_viewport_keeps_single_line_when_it_fits() { function shape_root_path_for_viewport_uses_middle_ellipsis_when_only_one_row_is_available (line 7811) | fn shape_root_path_for_viewport_uses_middle_ellipsis_when_only_one_row_i... function shape_root_path_for_viewport_splits_into_vertical_segments_when_narrow (line 7821) | fn shape_root_path_for_viewport_splits_into_vertical_segments_when_narro... function shape_root_path_for_viewport_preserves_posix_root_and_separator (line 7829) | fn shape_root_path_for_viewport_preserves_posix_root_and_separator() { function shape_root_path_for_viewport_regroups_segments_to_match_height_budget (line 7837) | fn shape_root_path_for_viewport_regroups_segments_to_match_height_budget... function shape_root_path_for_viewport_truncates_overwide_group_when_needed (line 7845) | fn shape_root_path_for_viewport_truncates_overwide_group_when_needed() { function rows_fit_in_box (line 7856) | fn rows_fit_in_box(rows: &[String], width: usize, height: usize) -> bool { function visible_signal (line 7860) | fn visible_signal(rows: &[String]) -> usize { function shaped_paths_fit_vertical_square_and_landscape_boxes (line 7867) | fn shaped_paths_fit_vertical_square_and_landscape_boxes() { function wider_viewports_do_not_increase_row_count_or_truncation_for_same_height (line 7899) | fn wider_viewports_do_not_increase_row_count_or_truncation_for_same_heig... function taller_viewports_do_not_increase_truncation_for_same_width (line 7920) | fn taller_viewports_do_not_increase_truncation_for_same_width() { function shallow_paths_prefer_horizontal_layouts_when_space_allows (line 7942) | fn shallow_paths_prefer_horizontal_layouts_when_space_allows() { function deep_paths_prefer_vertical_layouts_when_width_is_constrained (line 7956) | fn deep_paths_prefer_vertical_layouts_when_width_is_constrained() { function root_path_shaping_peels_from_deepest_parent_first (line 7972) | fn root_path_shaping_peels_from_deepest_parent_first() { function long_single_component_paths_are_truncated_to_fit (line 7984) | fn long_single_component_paths_are_truncated_to_fit() { function reducer_enter_power_saving_emits_mode_effect (line 7992) | fn reducer_enter_power_saving_emits_mode_effect() { function reducer_request_quit_sets_flag (line 8005) | fn reducer_request_quit_sets_flag() { function reducer_graph_actions_stop_at_boundaries (line 8015) | fn reducer_graph_actions_stop_at_boundaries() { function reducer_chart_view_actions_stop_at_boundaries (line 8035) | fn reducer_chart_view_actions_stop_at_boundaries() { function reducer_chart_view_navigation_includes_disk_mode (line 8058) | fn reducer_chart_view_navigation_includes_disk_mode() { function disk_series_draw_order_favors_more_recent_read_activity (line 8082) | fn disk_series_draw_order_favors_more_recent_read_activity() { function torrent_period_traffic_sums_download_and_upload_over_window (line 8088) | fn torrent_period_traffic_sums_download_and_upload_over_window() { function torrent_current_traffic_uses_latest_point_only (line 8121) | fn torrent_current_traffic_uses_latest_point_only() { function torrent_current_traffic_preserves_recent_activity_when_latest_bucket_is_zero (line 8162) | fn torrent_current_traffic_preserves_recent_activity_when_latest_bucket_... function details_eta_or_probe_text_uses_eta_for_incomplete_torrent (line 8200) | fn details_eta_or_probe_text_uses_eta_for_incomplete_torrent() { function details_eta_or_probe_text_uses_probe_for_completed_torrent (line 8214) | fn details_eta_or_probe_text_uses_probe_for_completed_torrent() { function torrent_overlay_legend_uses_full_chart_constraints (line 8228) | fn torrent_overlay_legend_uses_full_chart_constraints() { function torrent_overlay_legend_uses_top_left_position (line 8244) | fn torrent_overlay_legend_uses_top_left_position() { function speed_chart_upper_bound_adds_headroom_while_staying_near_peak (line 8260) | fn speed_chart_upper_bound_adds_headroom_while_staying_near_peak() { function selector_window_returns_full_list_when_not_compact (line 8267) | fn selector_window_returns_full_list_when_not_compact() { function selector_window_centers_active_item_when_compact (line 8273) | fn selector_window_centers_active_item_when_compact() { function selector_window_clamps_at_edges_in_compact_mode (line 8279) | fn selector_window_clamps_at_edges_in_compact_mode() { function selector_active_position_clamps_to_visible_edge_slots (line 8289) | fn selector_active_position_clamps_to_visible_edge_slots() { function keymap_includes_chart_view_controls (line 8299) | fn keymap_includes_chart_view_controls() { function keymap_includes_vim_right_navigation (line 8323) | fn keymap_includes_vim_right_navigation() { function keymap_ignores_control_modified_shortcuts (line 8331) | fn keymap_ignores_control_modified_shortcuts() { function accepts_magnet_links_as_paste_candidates (line 8343) | fn accepts_magnet_links_as_paste_candidates() { function accepts_existing_torrent_files_as_paste_candidates (line 8350) | fn accepts_existing_torrent_files_as_paste_candidates() { function rejects_invalid_paste_candidates (line 8359) | fn rejects_invalid_paste_candidates() { function build_time_aligned_window_snaps_unaligned_now_to_step_boundary (line 8363) | fn build_time_aligned_window_snaps_unaligned_now_to_step_boundary() { function reducer_open_add_torrent_browser_emits_effect (line 8393) | fn reducer_open_add_torrent_browser_emits_effect() { function reducer_open_delete_confirm_emits_mode_effect_and_sets_payload (line 8403) | fn reducer_open_delete_confirm_emits_mode_effect_and_sets_payload() { function reducer_open_delete_confirm_is_noop_when_no_selection (line 8419) | fn reducer_open_delete_confirm_is_noop_when_no_selection() { function reducer_open_config_emits_effect (line 8434) | fn reducer_open_config_emits_effect() { function reducer_open_rss_emits_open_rss_effect (line 8444) | fn reducer_open_rss_emits_open_rss_effect() { function reducer_open_journal_emits_open_journal_effect (line 8454) | fn reducer_open_journal_emits_open_journal_effect() { function reducer_data_rate_actions_update_rate_and_emit_effect (line 8464) | fn reducer_data_rate_actions_update_rate_and_emit_effect() { function reducer_theme_actions_emit_effects (line 8488) | fn reducer_theme_actions_emit_effects() { function reducer_toggle_pause_selected_toggles_state_and_emits_command_effect (line 8499) | fn reducer_toggle_pause_selected_toggles_state_and_emits_command_effect() { function reducer_sort_by_selected_column_updates_torrent_sort (line 8534) | fn reducer_sort_by_selected_column_updates_torrent_sort() { function reducer_sort_by_selected_column_keeps_dynamic_torrent_column_identity (line 8561) | fn reducer_sort_by_selected_column_keeps_dynamic_torrent_column_identity... function reducer_sort_by_selected_column_sorts_visible_dynamic_download_column (line 8591) | fn reducer_sort_by_selected_column_sorts_visible_dynamic_download_column... function reducer_sort_by_selected_column_updates_peer_sort (line 8624) | fn reducer_sort_by_selected_column_updates_peer_sort() { function reducer_sort_by_selected_column_selects_visible_dynamic_peer_download_column (line 8639) | fn reducer_sort_by_selected_column_selects_visible_dynamic_peer_download... function reducer_clear_manual_sorting_resumes_autosort (line 8668) | fn reducer_clear_manual_sorting_resumes_autosort() { function critical_details_panel_returns_simple_text_for_unavailable_data (line 8683) | fn critical_details_panel_returns_simple_text_for_unavailable_data() { function critical_details_panel_masks_path_when_anonymized (line 8716) | fn critical_details_panel_masks_path_when_anonymized() { function torrent_list_row_color_uses_error_when_data_is_unavailable (line 8750) | fn torrent_list_row_color_uses_error_when_data_is_unavailable() { function torrent_status_cell_shows_metadata_pending (line 8764) | fn torrent_status_cell_shows_metadata_pending() { function torrent_status_cell_shows_file_probe_issue (line 8775) | fn torrent_status_cell_shows_file_probe_issue() { function reducer_open_help_emits_help_effect (line 8785) | fn reducer_open_help_emits_help_effect() { function reducer_paste_text_emits_paste_effect (line 8793) | fn reducer_paste_text_emits_paste_effect() { function peer_stream_wave_amplitude_scales_with_activity (line 8809) | fn peer_stream_wave_amplitude_scales_with_activity() { function peer_stream_smoothed_activity_blends_neighbors (line 8821) | fn peer_stream_smoothed_activity_blends_neighbors() { function dht_wave_profile_responds_to_query_count (line 8828) | fn dht_wave_profile_responds_to_query_count() { function dht_wave_query_signal_uses_gentle_saturation (line 8851) | fn dht_wave_query_signal_uses_gentle_saturation() { function dht_wave_title_is_query_count_without_multiplier (line 8871) | fn dht_wave_title_is_query_count_without_multiplier() { function dht_wave_title_colors_multiplier_prefix (line 8882) | fn dht_wave_title_colors_multiplier_prefix() { function dht_wave_title_can_show_half_power_cap (line 8914) | fn dht_wave_title_can_show_half_power_cap() { function dht_wave_title_hides_left_label_when_width_is_tight (line 8925) | fn dht_wave_title_hides_left_label_when_width_is_tight() { function dht_peer_yield_wave_points_mirror_dht_wave_shape (line 8936) | fn dht_peer_yield_wave_points_mirror_dht_wave_shape() { function dht_peer_yield_draw_order_uses_stronger_signal_on_top (line 8953) | fn dht_peer_yield_draw_order_uses_stronger_signal_on_top() { function dht_wave_profile_ignores_health_when_query_count_matches (line 8960) | fn dht_wave_profile_ignores_health_when_query_count_matches() { function dht_wave_profile_stays_nearly_flat_when_only_routes_are_warm (line 8983) | fn dht_wave_profile_stays_nearly_flat_when_only_routes_are_warm() { function dht_wave_y_axis_bounds_scale_to_current_signal (line 9006) | fn dht_wave_y_axis_bounds_scale_to_current_signal() { function file_activity_wave_profile_grows_with_speed_tiers (line 9022) | fn file_activity_wave_profile_grows_with_speed_tiers() { function file_activity_wave_profile_clamps_band_width_to_text_length (line 9034) | fn file_activity_wave_profile_clamps_band_width_to_text_length() { function file_activity_wave_phase_can_continue_across_speed_changes (line 9042) | fn file_activity_wave_phase_can_continue_across_speed_changes() { function file_activity_wave_phase_offset_is_stable_per_path (line 9054) | fn file_activity_wave_phase_offset_is_stable_per_path() { function render_file_tree_name_spans_keeps_inactive_rows_at_base_style (line 9067) | fn render_file_tree_name_spans_keeps_inactive_rows_at_base_style() { function render_list_item_plain_lines (line 9094) | fn render_list_item_plain_lines(items: Vec>, width: u1... function build_torrent_file_list_items_limits_tree_rows_to_viewport_height (line 9115) | fn build_torrent_file_list_items_limits_tree_rows_to_viewport_height() { function build_torrent_file_list_items_promotes_active_files_when_limited (line 9143) | fn build_torrent_file_list_items_promotes_active_files_when_limited() { function activity_sorted_file_list_orders_by_recent_activity_and_adds_overflow_row (line 9180) | fn activity_sorted_file_list_orders_by_recent_activity_and_adds_overflow... function build_torrent_file_list_items_keeps_tree_order_when_not_limited (line 9227) | fn build_torrent_file_list_items_keeps_tree_order_when_not_limited() { function block_stream_and_disk_layout_uses_side_by_side_when_vertical_and_roomy (line 9264) | fn block_stream_and_disk_layout_uses_side_by_side_when_vertical_and_room... function block_stream_and_disk_layout_hides_blocks_when_vertical_stack_gets_too_narrow (line 9271) | fn block_stream_and_disk_layout_hides_blocks_when_vertical_stack_gets_to... function block_stream_and_disk_layout_keeps_stacked_mode_above_hide_breakpoint (line 9278) | fn block_stream_and_disk_layout_keeps_stacked_mode_above_hide_breakpoint... function dht_inserts_between_blocks_and_disk_only_in_horizontal_mode (line 9285) | fn dht_inserts_between_blocks_and_disk_only_in_horizontal_mode() { function block_stream_title_color_is_neutral_without_activity (line 9297) | fn block_stream_title_color_is_neutral_without_activity() { function block_stream_title_color_prefers_download_when_dominant (line 9307) | fn block_stream_title_color_prefers_download_when_dominant() { function block_stream_title_color_prefers_upload_when_dominant (line 9322) | fn block_stream_title_color_prefers_upload_when_dominant() { function block_stream_title_color_uses_recent_download_history_when_tick_is_zero (line 9337) | fn block_stream_title_color_uses_recent_download_history_when_tick_is_ze... function block_stream_title_color_uses_recent_upload_history_when_tick_is_zero (line 9354) | fn block_stream_title_color_uses_recent_upload_history_when_tick_is_zero... function block_stream_download_inflow_hidden_when_download_is_complete (line 9371) | fn block_stream_download_inflow_hidden_when_download_is_complete() { function block_stream_download_inflow_visible_when_download_is_incomplete (line 9381) | fn block_stream_download_inflow_visible_when_download_is_incomplete() { function disk_health_status_color_uses_state_slots_across_themes (line 9391) | fn disk_health_status_color_uses_state_slots_across_themes() { function disk_health_title_color_keeps_stable_readable_and_maps_alerts (line 9410) | fn disk_health_title_color_keeps_stable_readable_and_maps_alerts() { function disk_health_border_color_uses_normal_border_for_stable (line 9428) | fn disk_health_border_color_uses_normal_border_for_stable() { function disk_health_state_word_maps_levels (line 9439) | fn disk_health_state_word_maps_levels() { function disk_health_orb_layout_scales_box_without_exceeding_panel (line 9448) | fn disk_health_orb_layout_scales_box_without_exceeding_panel() { function disk_health_orb_layout_skips_tiny_panels (line 9458) | fn disk_health_orb_layout_skips_tiny_panels() { function disk_health_orb_dot_points (line 9463) | fn disk_health_orb_dot_points(rows: &[String]) -> Vec<(usize, usize)> { function disk_health_orb_dot_bounds (line 9487) | fn disk_health_orb_dot_bounds(points: &[(usize, usize)]) -> (usize, usiz... function disk_health_orb_layout_center_matches_panel_center (line 9497) | fn disk_health_orb_layout_center_matches_panel_center() { function disk_health_orb_stable_points_are_centered_and_not_clipped (line 9514) | fn disk_health_orb_stable_points_are_centered_and_not_clipped() { function peer_stream_legend_compacts_when_width_is_tight (line 9549) | fn peer_stream_legend_compacts_when_width_is_tight() { function peer_stream_legend_stays_verbose_when_width_allows (line 9554) | fn peer_stream_legend_stays_verbose_when_width_allows() { function apply_open_rss_screen_sets_rss_mode_and_unified_screen (line 9559) | async fn apply_open_rss_screen_sets_rss_mode_and_unified_screen() { function apply_open_journal_screen_sets_journal_mode (line 9580) | async fn apply_open_journal_screen_sets_journal_mode() { FILE: src/tui/screens/power.rs type PowerAction (line 16) | pub enum PowerAction { type PowerEffect (line 21) | pub enum PowerEffect { type PowerReduceResult (line 26) | pub struct PowerReduceResult { function map_key_to_power_action (line 31) | fn map_key_to_power_action(key_code: KeyCode, key_kind: KeyEventKind) ->... function reduce_power_action (line 38) | pub fn reduce_power_action(action: PowerAction) -> PowerReduceResult { function execute_power_effects (line 47) | pub fn execute_power_effects(app_state: &mut AppState, effects: Vec) { function power_z_returns_to_normal (line 226) | fn power_z_returns_to_normal() { function power_ignores_other_keys (line 241) | fn power_ignores_other_keys() { FILE: src/tui/screens/rss.rs type RssAction (line 20) | pub enum RssAction { type RssReduceResult (line 42) | pub struct RssReduceResult { function map_key_to_rss_action (line 46) | fn map_key_to_rss_action( function reduce_rss_action (line 95) | fn reduce_rss_action(action: RssAction) -> RssReduceResult { function next_focus (line 101) | fn next_focus(current: RssSectionFocus) -> RssSectionFocus { function selected_index_mut (line 109) | fn selected_index_mut(app_state: &mut AppState) -> &mut usize { function current_list_len (line 121) | fn current_list_len(app_state: &AppState, settings: &crate::config::Sett... function sorted_feed_indices (line 137) | fn sorted_feed_indices(settings: &crate::config::Settings) -> Vec { function selected_feed_actual_idx (line 148) | fn selected_feed_actual_idx( function sorted_filter_indices (line 157) | fn sorted_filter_indices(settings: &crate::config::Settings) -> Vec Option Vec { function filter_already_exists (line 236) | fn filter_already_exists( function filter_matches_title (line 249) | fn filter_matches_title( function explorer_should_be_greyed_out (line 262) | fn explorer_should_be_greyed_out(settings: &crate::config::Settings) -> ... function explorer_effective_greyed_out (line 266) | fn explorer_effective_greyed_out(app_state: &AppState, settings: &crate:... function is_valid_feed_url (line 273) | fn is_valid_feed_url(value: &str) -> bool { function truncate_with_ellipsis (line 317) | fn truncate_with_ellipsis(input: &str, max_chars: usize) -> String { function execute_rss_effects (line 336) | fn execute_rss_effects( function apply_pasted_text (line 736) | fn apply_pasted_text(app_state: &mut AppState, pasted_text: &str) { function handle_event (line 754) | pub fn handle_event( function draw_input_panel (line 781) | fn draw_input_panel(f: &mut Frame, area: Rect, screen: &ScreenContext<'_... function draw_shared_footer (line 838) | fn draw_shared_footer(f: &mut Frame, area: Rect, screen: &ScreenContext<... function selected_delete_label (line 907) | fn selected_delete_label( function draw_delete_confirm_dialog (line 929) | fn draw_delete_confirm_dialog(f: &mut Frame, area: Rect, screen: &Screen... function sync_countdown_label (line 1007) | fn sync_countdown_label(next_sync_at: &str) -> Option { function filtered_history_entries (line 1031) | fn filtered_history_entries<'a>( function human_readable_history_time (line 1055) | fn human_readable_history_time(date_iso: &str) -> String { function link_matches_selected_explorer_item (line 1065) | fn link_matches_selected_explorer_item(feed_url: &str, item: &crate::app... function pane_block (line 1102) | fn pane_block<'a>(title: &'a str, active: bool, ctx: &crate::theme::Them... function draw_links (line 1116) | fn draw_links(f: &mut Frame, area: Rect, screen: &ScreenContext<'_>, act... function active_filter_spec (line 1242) | fn active_filter_spec( function focused_filter_query (line 1269) | fn focused_filter_query( function compute_filter_preview_items (line 1296) | fn compute_filter_preview_items( function compute_filter_match_counts (line 1327) | fn compute_filter_match_counts( function compute_filter_downloaded_matches (line 1387) | fn compute_filter_downloaded_matches( function filter_history_age_label (line 1436) | fn filter_history_age_label( function compute_filter_runtime_stats (line 1467) | fn compute_filter_runtime_stats( function build_history_hash_by_dedupe (line 1493) | fn build_history_hash_by_dedupe( function recompute_rss_derived (line 1508) | pub fn recompute_rss_derived(app_state: &mut AppState, settings: &crate:... function normalize_title (line 1538) | fn normalize_title(input: &str) -> String { function draw_filters (line 1546) | fn draw_filters(f: &mut Frame, area: Rect, screen: &ScreenContext<'_>, a... function compute_explorer_items (line 1667) | fn compute_explorer_items( function rss_item_completion_percent (line 1761) | fn rss_item_completion_percent( function build_completion_by_normalized_title (line 1796) | fn build_completion_by_normalized_title(app_state: &AppState) -> HashMap... function format_completion_prefix (line 1809) | fn format_completion_prefix(pct: f64) -> String { function completion_color_for_pct (line 1817) | fn completion_color_for_pct(ctx: &crate::theme::ThemeContext, pct: f64) ... function draw_explorer (line 1825) | fn draw_explorer(f: &mut Frame, area: Rect, screen: &ScreenContext<'_>, ... function draw_history (line 1943) | fn draw_history(f: &mut Frame, area: Rect, screen: &ScreenContext<'_>) { type UnifiedLayout (line 1984) | enum UnifiedLayout { function unified_layout_for_width (line 1989) | fn unified_layout_for_width(width: u16) -> UnifiedLayout { function draw_unified_body (line 1997) | fn draw_unified_body(f: &mut Frame, area: Rect, screen: &ScreenContext<'... function draw (line 2067) | pub fn draw(f: &mut Frame, screen: &ScreenContext<'_>) { function base_state (line 2111) | fn base_state() -> AppState { function esc_returns_to_normal_mode (line 2119) | fn esc_returns_to_normal_mode() { function tab_cycles_focus_sections (line 2138) | fn tab_cycles_focus_sections() { function h_toggles_history_and_returns_to_explorer_focus (line 2192) | fn h_toggles_history_and_returns_to_explorer_focus() { function down_moves_rows_and_left_right_do_not_change_focus (line 2228) | fn down_moves_rows_and_left_right_do_not_change_focus() { function sync_key_enqueues_command (line 2283) | fn sync_key_enqueues_command() { function sync_key_auto_enables_rss_when_disabled (line 2307) | fn sync_key_auto_enables_rss_when_disabled() { function sync_key_is_throttled_when_spammed (line 2334) | fn sync_key_is_throttled_when_spammed() { function add_link_dispatches_update_config (line 2370) | fn add_link_dispatches_update_config() { function add_entry_from_explorer_does_not_start_editing (line 2411) | fn add_entry_from_explorer_does_not_start_editing() { function add_entry_from_links_starts_editing (line 2443) | fn add_entry_from_links_starts_editing() { function add_entry_from_filters_starts_editing (line 2467) | fn add_entry_from_filters_starts_editing() { function add_link_reports_failure_when_update_config_enqueue_fails (line 2497) | fn add_link_reports_failure_when_update_config_enqueue_fails() { function invalid_feed_url_is_rejected (line 2538) | fn invalid_feed_url_is_rejected() { function paste_link_in_edit_mode_dispatches_update_config (line 2574) | fn paste_link_in_edit_mode_dispatches_update_config() { function delete_link_requires_confirmation_then_dispatches_update_config (line 2609) | fn delete_link_requires_confirmation_then_dispatches_update_config() { function delete_link_confirmation_can_be_cancelled_with_escape (line 2651) | fn delete_link_confirmation_can_be_cancelled_with_escape() { function toggle_link_dispatches_update_config (line 2691) | fn toggle_link_dispatches_update_config() { function toggle_filter_dispatches_update_config (line 2719) | fn toggle_filter_dispatches_update_config() { function tab_toggles_filter_mode_while_editing_filter (line 2748) | fn tab_toggles_filter_mode_while_editing_filter() { function add_filter_rejects_invalid_regex_pattern (line 2799) | fn add_filter_rejects_invalid_regex_pattern() { function add_filter_rejects_duplicate_filter (line 2846) | fn add_filter_rejects_duplicate_filter() { function add_filter_rejects_duplicate_filter_with_case_and_whitespace (line 2896) | fn add_filter_rejects_duplicate_filter_with_case_and_whitespace() { function shift_y_downloads_selected_explorer_item_when_not_downloaded (line 2946) | fn shift_y_downloads_selected_explorer_item_when_not_downloaded() { function shift_y_allows_selected_explorer_item_when_already_downloaded (line 2981) | fn shift_y_allows_selected_explorer_item_when_already_downloaded() { function explorer_search_mode_sets_and_clears_status (line 3020) | fn explorer_search_mode_sets_and_clears_status() { function history_search_mode_sets_and_clears_status (line 3058) | fn history_search_mode_sets_and_clears_status() { function backspace_does_not_exit_search_mode_when_query_becomes_empty (line 3096) | fn backspace_does_not_exit_search_mode_when_query_becomes_empty() { function explorer_compute_filters_out_non_matches_when_search_active (line 3135) | fn explorer_compute_filters_out_non_matches_when_search_active() { function search_enter_keeps_mode_active_when_query_non_empty (line 3158) | fn search_enter_keeps_mode_active_when_query_non_empty() { function explorer_compute_sorts_matches_first_only_when_active (line 3198) | fn explorer_compute_sorts_matches_first_only_when_active() { function explorer_compute_prefers_draft_matches_while_creating_filter (line 3228) | fn explorer_compute_prefers_draft_matches_while_creating_filter() { function explorer_compute_supports_regex_draft_matching (line 3251) | fn explorer_compute_supports_regex_draft_matching() { function explorer_compute_prefers_regex_draft_matches_over_existing_filter_matches (line 3276) | fn explorer_compute_prefers_regex_draft_matches_over_existing_filter_mat... function filter_preview_keeps_all_items_and_sorts_matches_first (line 3305) | fn filter_preview_keeps_all_items_and_sorts_matches_first() { function filter_preview_with_empty_draft_still_shows_full_list (line 3326) | fn filter_preview_with_empty_draft_still_shows_full_list() { function compute_filter_match_counts_counts_feed_and_downloaded_from_torrent_hash (line 3344) | fn compute_filter_match_counts_counts_feed_and_downloaded_from_torrent_h... function compute_filter_match_counts_falls_back_to_history_when_no_torrent_hash_match (line 3368) | fn compute_filter_match_counts_falls_back_to_history_when_no_torrent_has... function compute_filter_match_counts_uses_history_when_no_feed_matches (line 3393) | fn compute_filter_match_counts_uses_history_when_no_feed_matches() { function compute_filter_match_counts_counts_app_state_and_missing_history_entries (line 3420) | fn compute_filter_match_counts_counts_app_state_and_missing_history_entr... function active_filter_spec_uses_selected_filter_in_nav_mode (line 3465) | fn active_filter_spec_uses_selected_filter_in_nav_mode() { function active_filter_spec_ignores_disabled_selected_filter (line 3491) | fn active_filter_spec_ignores_disabled_selected_filter() { function active_filter_spec_ignores_stale_draft_when_not_editing (line 3510) | fn active_filter_spec_ignores_stale_draft_when_not_editing() { function focused_filter_query_uses_selected_filter_in_filters_focus (line 3523) | fn focused_filter_query_uses_selected_filter_in_filters_focus() { function focused_filter_query_is_none_when_not_on_filters_focus (line 3542) | fn focused_filter_query_is_none_when_not_on_filters_focus() { function explorer_greyed_out_when_no_filters_exist (line 3559) | fn explorer_greyed_out_when_no_filters_exist() { function explorer_greyed_out_when_all_filters_disabled (line 3565) | fn explorer_greyed_out_when_all_filters_disabled() { function explorer_not_greyed_out_when_any_filter_enabled (line 3581) | fn explorer_not_greyed_out_when_any_filter_enabled() { function explorer_effective_greyed_out_is_false_while_creating_first_filter_with_draft (line 3597) | fn explorer_effective_greyed_out_is_false_while_creating_first_filter_wi... function explorer_effective_greyed_out_is_true_while_creating_first_filter_without_draft (line 3608) | fn explorer_effective_greyed_out_is_true_while_creating_first_filter_wit... function sync_countdown_label_formats_minutes_and_seconds (line 3619) | fn sync_countdown_label_formats_minutes_and_seconds() { function sync_countdown_label_returns_none_for_past_timestamp (line 3627) | fn sync_countdown_label_returns_none_for_past_timestamp() { function is_valid_feed_url_rejects_localhost_and_private_ips (line 3633) | fn is_valid_feed_url_rejects_localhost_and_private_ips() { function is_valid_feed_url_accepts_public_https_feed (line 3640) | fn is_valid_feed_url_accepts_public_https_feed() { function truncate_with_ellipsis_shortens_long_text (line 3645) | fn truncate_with_ellipsis_shortens_long_text() { function filtered_history_entries_respects_search_query (line 3650) | fn filtered_history_entries_respects_search_query() { function human_readable_history_time_formats_rfc3339 (line 3672) | fn human_readable_history_time_formats_rfc3339() { function link_matches_selected_explorer_item_matches_by_host (line 3678) | fn link_matches_selected_explorer_item_matches_by_host() { function link_matches_selected_explorer_item_matches_by_source_hint (line 3690) | fn link_matches_selected_explorer_item_matches_by_source_hint() { function rss_item_completion_percent_is_none_without_live_torrent_metrics (line 3703) | fn rss_item_completion_percent_is_none_without_live_torrent_metrics() { function rss_item_completion_percent_uses_history_info_hash_fallback (line 3724) | fn rss_item_completion_percent_uses_history_info_hash_fallback() { function rss_item_completion_percent_does_not_require_downloaded_flag (line 3760) | fn rss_item_completion_percent_does_not_require_downloaded_flag() { function unified_layout_is_narrow_below_boundary (line 3795) | fn unified_layout_is_narrow_below_boundary() { function unified_layout_is_wide_at_boundary (line 3803) | fn unified_layout_is_wide_at_boundary() { FILE: src/tui/screens/welcome.rs constant WELCOME_LICENSE_LABEL (line 12) | const WELCOME_LICENSE_LABEL: &str = "GNU General Public License v3.0"; constant LOGO_LARGE (line 14) | const LOGO_LARGE: &str = r#" constant LOGO_MEDIUM (line 26) | const LOGO_MEDIUM: &str = r#" constant LOGO_SMALL (line 36) | const LOGO_SMALL: &str = r#" type WelcomeAction (line 45) | pub enum WelcomeAction { type WelcomeEffect (line 50) | pub enum WelcomeEffect { type WelcomeReduceResult (line 55) | pub struct WelcomeReduceResult { function map_key_to_welcome_action (line 60) | fn map_key_to_welcome_action(key_code: KeyCode, key_kind: KeyEventKind) ... function reduce_welcome_action (line 67) | pub fn reduce_welcome_action(action: WelcomeAction) -> WelcomeReduceResu... function execute_welcome_effects (line 76) | pub fn execute_welcome_effects(app_state: &mut AppState, effects: Vec) { function handle_event (line 372) | pub fn handle_event(event: CrosstermEvent, app_state: &mut AppState) { function get_animated_style (line 383) | fn get_animated_style(ctx: &ThemeContext, x: usize, y: usize) -> Style { function draw_background_dust (line 416) | fn draw_background_dust(f: &mut Frame, area: Rect, ctx: &ThemeContext) { function welcome_esc_transitions_to_normal (line 488) | fn welcome_esc_transitions_to_normal() { function welcome_ignores_non_esc_keys (line 503) | fn welcome_ignores_non_esc_keys() { FILE: src/tui/tree.rs type RawNode (line 10) | pub struct RawNode { function expand_all (line 23) | pub fn expand_all(&self, state: &mut TreeViewState) { function sort_recursive (line 32) | pub fn sort_recursive(&mut self) { function find_and_act (line 43) | pub fn find_and_act(&mut self, target_path: &Path, action: &mut F) ->... function apply_recursive (line 61) | pub fn apply_recursive(&mut self, action: &F) function from_path_list (line 77) | pub fn from_path_list(custom_root: Option, files: Vec<(Vec = Rc) -> bool>; type TreeFilter (line 162) | pub struct TreeFilter { method default (line 168) | fn default() -> Self { function from_text (line 177) | pub fn from_text(input: &str) -> Self { function new (line 189) | pub fn new(input: &str, rule: impl Fn(&RawNode) -> bool + 'static) ->... function matches (line 195) | pub fn matches(&self, node: &RawNode) -> bool { function any_matches (line 208) | pub fn any_matches(&self, node: &RawNode) -> bool { type TreeViewState (line 217) | pub struct TreeViewState { method new (line 226) | pub fn new() -> Self { type RenderItem (line 232) | pub struct RenderItem<'a, T> { method clone (line 243) | fn clone(&self) -> Self { type TreeAction (line 257) | pub enum TreeAction { type TreeMathHelper (line 264) | pub struct TreeMathHelper; method get_visible_slice (line 267) | pub fn get_visible_slice<'a, T>( method apply_action (line 286) | pub fn apply_action( method project_recursive (line 298) | fn project_recursive<'a, T>( method handle_action (line 336) | fn handle_action( type TestPayload (line 408) | struct TestPayload { function mock_complex_tree (line 412) | fn mock_complex_tree() -> Vec> { function test_initial_state (line 462) | fn test_initial_state() { function test_scrolling_down_triggers_offset (line 470) | fn test_scrolling_down_triggers_offset() { function test_scrolling_behavior_on_zoom_change (line 498) | fn test_scrolling_behavior_on_zoom_change() { function test_left_collapses_dir (line 515) | fn test_left_collapses_dir() { function test_search_auto_expands_and_filters (line 533) | fn test_search_auto_expands_and_filters() { function test_lazy_loading_simulation (line 547) | fn test_lazy_loading_simulation() { function test_list_reordering_preserves_cursor (line 588) | fn test_list_reordering_preserves_cursor() { function test_expanding_actually_empty_directory (line 620) | fn test_expanding_actually_empty_directory() { function test_smart_nav_right_descends_into_child (line 654) | fn test_smart_nav_right_descends_into_child() { function test_smart_nav_left_jumps_to_parent (line 683) | fn test_smart_nav_left_jumps_to_parent() { function test_selection_persists_after_collapse (line 713) | fn test_selection_persists_after_collapse() { FILE: src/tui/view.rs function draw (line 23) | pub fn draw( function calculate_player_stats (line 133) | pub(crate) fn calculate_player_stats(app_state: &AppState) -> (u32, f64) { function create_ctx (line 193) | fn create_ctx(width: u16, height: u16) -> LayoutContext { function test_too_small_window_width (line 202) | fn test_too_small_window_width() { function test_too_small_window_height (line 215) | fn test_too_small_window_height() { function test_short_window_layout (line 228) | fn test_short_window_layout() { function test_narrow_vertical_layout (line 247) | fn test_narrow_vertical_layout() { function test_tall_vertical_layout (line 272) | fn test_tall_vertical_layout() { function test_standard_wide_layout_no_block_stream (line 289) | fn test_standard_wide_layout_no_block_stream() { function test_ultra_wide_layout_with_block_stream (line 320) | fn test_ultra_wide_layout_with_block_stream() { function test_smart_table_layout_priorities (line 344) | fn test_smart_table_layout_priorities() { function test_truncate_theme_label_preserves_fx_suffix_when_truncated (line 384) | fn test_truncate_theme_label_preserves_fx_suffix_when_truncated() { function test_truncate_theme_label_shows_full_fx_label_when_space_allows (line 394) | fn test_truncate_theme_label_shows_full_fx_label_when_space_allows() { function test_footer_left_width_expands_with_terminal_width (line 404) | fn test_footer_left_width_expands_with_terminal_width() { function test_footer_left_width_respects_bounds (line 414) | fn test_footer_left_width_respects_bounds() { function test_footer_side_widths_use_actual_status_width_on_right (line 430) | fn test_footer_side_widths_use_actual_status_width_on_right() { function test_footer_side_widths_preserve_command_space (line 438) | fn test_footer_side_widths_preserve_command_space() { function test_footer_status_width_reserves_visual_gutter (line 453) | fn test_footer_status_width_reserves_visual_gutter() { function test_footer_fps_label_shows_target_until_measurement_exists (line 462) | fn test_footer_fps_label_shows_target_until_measurement_exists() { function test_footer_fps_label_shows_measured_and_target_when_below_target (line 475) | fn test_footer_fps_label_shows_measured_and_target_when_below_target() { function test_footer_fps_label_hides_measured_when_at_target (line 489) | fn test_footer_fps_label_hides_measured_when_at_target() { function test_footer_fps_label_hides_measured_when_above_target (line 503) | fn test_footer_fps_label_hides_measured_when_above_target() { function test_footer_fps_label_hides_measured_when_rounded_to_target (line 517) | fn test_footer_fps_label_hides_measured_when_rounded_to_target() { function test_footer_fps_label_preserves_fractional_targets_when_below_target (line 531) | fn test_footer_fps_label_preserves_fractional_targets_when_below_target() { function test_footer_fps_label_hides_fractional_measured_when_at_target (line 545) | fn test_footer_fps_label_hides_fractional_measured_when_at_target() { FILE: src/tuning/mod.rs constant MIN_STEP_RATE (line 10) | pub(crate) const MIN_STEP_RATE: f64 = 0.01; constant MAX_STEP_RATE (line 11) | pub(crate) const MAX_STEP_RATE: f64 = 0.10; constant BASELINE_ALPHA (line 12) | pub(crate) const BASELINE_ALPHA: f64 = 0.1; constant REALITY_CHECK_FACTOR (line 13) | pub(crate) const REALITY_CHECK_FACTOR: f64 = 2.0; constant DEFAULT_TUNING_CADENCE_SECS (line 15) | pub(crate) const DEFAULT_TUNING_CADENCE_SECS: u64 = 90; constant DEFAULT_TUNING_LOOKBACK_SECS (line 17) | pub(crate) const DEFAULT_TUNING_LOOKBACK_SECS: usize = 60; constant MIN_TUNING_CADENCE_SECS (line 18) | pub(crate) const MIN_TUNING_CADENCE_SECS: u64 = 15; constant MAX_TUNING_CADENCE_SECS (line 19) | pub(crate) const MAX_TUNING_CADENCE_SECS: u64 = 180; constant FAST_START_CADENCE_SECS (line 20) | pub(crate) const FAST_START_CADENCE_SECS: u64 = 20; constant FAST_START_CYCLES (line 21) | pub(crate) const FAST_START_CYCLES: u8 = 3; constant MIN_TUNING_LOOKBACK_SECS (line 22) | pub(crate) const MIN_TUNING_LOOKBACK_SECS: usize = 15; constant MAX_TUNING_LOOKBACK_SECS (line 23) | pub(crate) const MAX_TUNING_LOOKBACK_SECS: usize = 60; constant LOOKBACK_RATIO (line 24) | const LOOKBACK_RATIO: f64 = 0.7; constant IMPROVEMENT_SPEEDUP_FACTOR (line 25) | const IMPROVEMENT_SPEEDUP_FACTOR: f64 = 0.85; constant STAGNATION_BACKOFF_FACTOR (line 26) | const STAGNATION_BACKOFF_FACTOR: f64 = 1.6; constant REGRESSION_SPEEDUP_FACTOR (line 27) | const REGRESSION_SPEEDUP_FACTOR: f64 = 0.5; constant STAGNATION_BACKOFF_START_CYCLES (line 28) | const STAGNATION_BACKOFF_START_CYCLES: u32 = 2; constant RAPID_REGRESSION_RATIO (line 29) | const RAPID_REGRESSION_RATIO: f64 = 0.90; constant SEVERE_REGRESSION_RATIO (line 30) | const SEVERE_REGRESSION_RATIO: f64 = 0.75; constant PENALTY_SPIKE_DELTA (line 31) | const PENALTY_SPIKE_DELTA: f64 = 0.25; constant CADENCE_CHANGE_PRESSURE_TRIGGER (line 32) | const CADENCE_CHANGE_PRESSURE_TRIGGER: u8 = 4; constant CADENCE_CHANGE_PRESSURE_DECAY (line 33) | const CADENCE_CHANGE_PRESSURE_DECAY: u8 = 1; constant HIGH_NOISE_REL_STDDEV (line 34) | const HIGH_NOISE_REL_STDDEV: f64 = 0.25; constant REGRESSION_SPEEDUP_BUDGET_CYCLES (line 35) | const REGRESSION_SPEEDUP_BUDGET_CYCLES: u8 = 3; constant MIN_CADENCE_NO_IMPROVEMENT_BACKOFF_CYCLES (line 36) | const MIN_CADENCE_NO_IMPROVEMENT_BACKOFF_CYCLES: u32 = 3; constant STALE_BEST_DECAY_START_CYCLES (line 37) | const STALE_BEST_DECAY_START_CYCLES: u32 = 6; constant STALE_BEST_DECAY_FACTOR (line 38) | const STALE_BEST_DECAY_FACTOR: f64 = 0.97; constant MIN_PEERS (line 40) | pub(crate) const MIN_PEERS: usize = 20; constant MIN_DISK (line 41) | pub(crate) const MIN_DISK: usize = 2; constant MIN_RESERVE (line 42) | pub(crate) const MIN_RESERVE: usize = 0; constant MAX_TRADE_ATTEMPTS (line 44) | pub(crate) const MAX_TRADE_ATTEMPTS: usize = 5; type TuningState (line 47) | pub(crate) struct TuningState { method new (line 55) | pub(crate) fn new(initial_limits: CalculatedLimits) -> Self { type TuningController (line 66) | pub(crate) struct TuningController { method new_fixed (line 82) | pub(crate) fn new_fixed(initial_limits: CalculatedLimits) -> Self { method new_adaptive (line 98) | pub(crate) fn new_adaptive(initial_limits: CalculatedLimits) -> Self { method cadence_secs (line 115) | pub(crate) fn cadence_secs(&self) -> u64 { method lookback_secs (line 119) | pub(crate) fn lookback_secs(&self) -> usize { method countdown_secs (line 123) | pub(crate) fn countdown_secs(&self) -> u64 { method state (line 127) | pub(crate) fn state(&self) -> &TuningState { method on_second_tick (line 131) | pub(crate) fn on_second_tick(&mut self) { method reset_for_objective_change (line 135) | pub(crate) fn reset_for_objective_change(&mut self, current_limits: &C... method update_live_score (line 153) | pub(crate) fn update_live_score( method evaluate_cycle (line 164) | pub(crate) fn evaluate_cycle( method apply_cadence_policy (line 188) | fn apply_cadence_policy( type ScaleDirection (line 288) | enum ScaleDirection { function scaled_cadence (line 293) | fn scaled_cadence(cadence_secs: u64, factor: f64, direction: ScaleDirect... function derive_lookback_secs (line 301) | fn derive_lookback_secs(cadence_secs: u64) -> usize { function relative_stddev (line 307) | fn relative_stddev(values: &[u64]) -> f64 { function normalize_limits_for_mode (line 326) | pub(crate) fn normalize_limits_for_mode( type TuningEvaluation (line 361) | pub(crate) struct TuningEvaluation { type TuningScore (line 376) | pub(crate) struct TuningScore { function compute_tuning_score (line 382) | pub(crate) fn compute_tuning_score( function evaluate_tuning_cycle (line 402) | pub(crate) fn evaluate_tuning_cycle( function evaluate_tuning_cycle_from_score (line 421) | pub(crate) fn evaluate_tuning_cycle_from_score( function get_limit (line 472) | fn get_limit(limits: &CalculatedLimits, resource: ResourceType) -> usize { function set_limit (line 481) | fn set_limit(limits: &mut CalculatedLimits, resource: ResourceType, valu... function make_random_adjustment (line 490) | pub(crate) fn make_random_adjustment( function make_random_adjustment_with_rng (line 498) | pub(crate) fn make_random_adjustment_with_rng( type SyntheticWorkload (line 580) | struct SyntheticWorkload { method sample (line 592) | fn sample(&self, limits: &CalculatedLimits) -> (u64, f64) { type SimulationResult (line 637) | struct SimulationResult { type SimulationState (line 645) | struct SimulationState { method new (line 654) | fn new(initial_limits: CalculatedLimits, seed: u64) -> Self { method run_phase (line 664) | fn run_phase(&mut self, cycles: usize, workload: &SyntheticWorkload) -... function simulate_tuning_cycles (line 710) | fn simulate_tuning_cycles( function tuner_simulation_converges_toward_known_optimum_no_noise (line 721) | fn tuner_simulation_converges_toward_known_optimum_no_noise() { function tuner_simulation_under_disk_pressure_converges_to_lower_disk_limits (line 773) | fn tuner_simulation_under_disk_pressure_converges_to_lower_disk_limits() { function tuner_simulation_converges_toward_nonzero_reserve_optimum (line 832) | fn tuner_simulation_converges_toward_nonzero_reserve_optimum() { function tuner_simulation_recovers_from_high_reserve_phase_when_demand_returns (line 896) | fn tuner_simulation_recovers_from_high_reserve_phase_when_demand_returns... function tuner_evaluation_reverts_when_candidate_is_worse (line 988) | fn tuner_evaluation_reverts_when_candidate_is_worse() { function tuner_simulation_plateau_stays_stable_without_runaway (line 1028) | fn tuner_simulation_plateau_stays_stable_without_runaway() { function random_adjustment_respects_min_bounds_over_many_steps (line 1057) | fn random_adjustment_respects_min_bounds_over_many_steps() { function tuner_evaluation_reality_check_resets_stale_best_score (line 1077) | fn tuner_evaluation_reality_check_resets_stale_best_score() { function seeding_adjustment_disables_disk_write_trades_and_sets_zero_write_slots (line 1093) | fn seeding_adjustment_disables_disk_write_trades_and_sets_zero_write_slo... function seeding_adjustment_preserves_total_disk_slots_by_moving_write_to_read (line 1109) | fn seeding_adjustment_preserves_total_disk_slots_by_moving_write_to_read... function normalize_limits_for_mode_seeding_zeros_write_and_preserves_total (line 1136) | fn normalize_limits_for_mode_seeding_zeros_write_and_preserves_total() { function normalize_limits_for_mode_seeding_targets_70_30_peer_read_and_zero_reserve_write (line 1159) | fn normalize_limits_for_mode_seeding_targets_70_30_peer_read_and_zero_re... function normalize_limits_for_mode_downloading_targets_30_70_read_write_split (line 1174) | fn normalize_limits_for_mode_downloading_targets_30_70_read_write_split() { function tuning_controller_fixed_policy_uses_default_lookback_and_countdown (line 1190) | fn tuning_controller_fixed_policy_uses_default_lookback_and_countdown() { function tuning_controller_objective_reset_clears_scores_and_ema (line 1210) | fn tuning_controller_objective_reset_clears_scores_and_ema() { function tuning_controller_evaluate_cycle_resets_countdown_and_tracks_best (line 1229) | fn tuning_controller_evaluate_cycle_resets_countdown_and_tracks_best() { function adaptive_controller_starts_fast_with_linked_lookback (line 1254) | fn adaptive_controller_starts_fast_with_linked_lookback() { function adaptive_controller_backs_off_after_stagnation (line 1268) | fn adaptive_controller_backs_off_after_stagnation() { function adaptive_controller_speeds_up_on_rapid_regression (line 1295) | fn adaptive_controller_speeds_up_on_rapid_regression() { function adaptive_controller_forces_backoff_when_change_pressure_is_high (line 1321) | fn adaptive_controller_forces_backoff_when_change_pressure_is_high() { function adaptive_controller_limits_regression_speedups_then_backs_off (line 1338) | fn adaptive_controller_limits_regression_speedups_then_backs_off() { function adaptive_controller_decays_stale_best_after_repeated_no_improvement (line 1368) | fn adaptive_controller_decays_stale_best_after_repeated_no_improvement() { FILE: src/watch_inbox.rs function is_cross_device_link_error (line 10) | pub fn is_cross_device_link_error(error: &io::Error) -> bool { function open_for_timestamp_update (line 14) | pub fn open_for_timestamp_update(destination: &Path) -> io::Result( function move_file_with_fallback (line 57) | pub fn move_file_with_fallback(source: &Path, destination: &Path) -> io:... function processed_watch_destination (line 61) | pub fn processed_watch_destination(path: &Path) -> Option { function unique_relay_destination (line 75) | fn unique_relay_destination(source: &Path, destination_dir: &Path) -> io... function relay_watch_file_to_shared_inbox (line 103) | pub fn relay_watch_file_to_shared_inbox(path: &Path) -> io::Result io::... function shared_env_guard (line 134) | fn shared_env_guard() -> &'static std::sync::Mutex<()> { function cross_device_link_detection_accepts_windows_and_unix_codes (line 139) | fn cross_device_link_detection_accepts_windows_and_unix_codes() { function move_file_with_fallback_copies_when_rename_crosses_devices (line 149) | fn move_file_with_fallback_copies_when_rename_crosses_devices() { function archive_watch_file_falls_back_to_local_rename_when_processed_dir_is_unavailable (line 168) | fn archive_watch_file_falls_back_to_local_rename_when_processed_dir_is_u... function relay_watch_file_to_shared_inbox_moves_file (line 189) | fn relay_watch_file_to_shared_inbox_moves_file() {