From af3f4a423a222ef097e716654b565cb76d551159 Mon Sep 17 00:00:00 2001 From: AusAgentSmith Date: Sun, 26 Apr 2026 09:47:58 +0000 Subject: [PATCH 1/6] fix: add registry = "forgejo" to internal deps; bump to 0.1.2 --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 0771645..e550b49 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "librtbit-dht" -version = "0.1.1" +version = "0.1.2" edition = "2024" description = "Kademlia DHT implementation for the rtbit BitTorrent client" license = "MIT" From 65f6f0fca93efff0d6bf4910b93017dd05621b12 Mon Sep 17 00:00:00 2001 From: TheDancingDeveloper <306930456+thedancingdeveloper@users.noreply.github.com> Date: Thu, 14 May 2026 11:46:59 +1000 Subject: [PATCH 2/6] Add sccache to Rust CI steps --- .woodpecker.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/.woodpecker.yml b/.woodpecker.yml index 51b543c..4934f31 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -10,7 +10,10 @@ steps: environment: GIT_AUTH_TOKEN: from_secret: git_auth_token + RUSTC_WRAPPER: sccache + SCCACHE_REDIS: "redis://100.92.54.45:6380" commands: + - apt-get install -y --no-install-recommends sccache >/dev/null 2>&1 || true - git config --global url."http://x-access-token:$GIT_AUTH_TOKEN@100.92.54.45:3002/".insteadOf "http://100.92.54.45:3002/" - printf '[registries.forgejo]\nindex = "sparse+https://repo.indexarr.net/api/packages/indexarr/cargo/"\ncredential-provider = "cargo:token"\n\n[registry]\ndefault = "forgejo"\n' > $CARGO_HOME/config.toml - printf '[registries.forgejo]\ntoken = "Bearer %s"\n' "$GIT_AUTH_TOKEN" > $CARGO_HOME/credentials.toml @@ -22,7 +25,10 @@ steps: environment: GIT_AUTH_TOKEN: from_secret: git_auth_token + RUSTC_WRAPPER: sccache + SCCACHE_REDIS: "redis://100.92.54.45:6380" commands: + - apt-get install -y --no-install-recommends sccache >/dev/null 2>&1 || true - git config --global url."http://x-access-token:$GIT_AUTH_TOKEN@100.92.54.45:3002/".insteadOf "http://100.92.54.45:3002/" - printf '[registries.forgejo]\nindex = "sparse+https://repo.indexarr.net/api/packages/indexarr/cargo/"\ncredential-provider = "cargo:token"\n\n[registry]\ndefault = "forgejo"\n' > $CARGO_HOME/config.toml - printf '[registries.forgejo]\ntoken = "Bearer %s"\n' "$GIT_AUTH_TOKEN" > $CARGO_HOME/credentials.toml @@ -33,7 +39,10 @@ steps: environment: GIT_AUTH_TOKEN: from_secret: git_auth_token + RUSTC_WRAPPER: sccache + SCCACHE_REDIS: "redis://100.92.54.45:6380" commands: + - apt-get install -y --no-install-recommends sccache >/dev/null 2>&1 || true - git config --global url."http://x-access-token:$GIT_AUTH_TOKEN@100.92.54.45:3002/".insteadOf "http://100.92.54.45:3002/" - printf '[registries.forgejo]\nindex = "sparse+https://repo.indexarr.net/api/packages/indexarr/cargo/"\ncredential-provider = "cargo:token"\n\n[registry]\ndefault = "forgejo"\n' > $CARGO_HOME/config.toml - printf '[registries.forgejo]\ntoken = "Bearer %s"\n' "$GIT_AUTH_TOKEN" > $CARGO_HOME/credentials.toml @@ -44,7 +53,10 @@ steps: environment: GIT_AUTH_TOKEN: from_secret: git_auth_token + RUSTC_WRAPPER: sccache + SCCACHE_REDIS: "redis://100.92.54.45:6380" commands: + - apt-get install -y --no-install-recommends sccache >/dev/null 2>&1 || true - git config --global url."http://x-access-token:$GIT_AUTH_TOKEN@100.92.54.45:3002/".insteadOf "http://100.92.54.45:3002/" - printf '[registries.forgejo]\nindex = "sparse+https://repo.indexarr.net/api/packages/indexarr/cargo/"\ncredential-provider = "cargo:token"\n\n[registry]\ndefault = "forgejo"\n' > $CARGO_HOME/config.toml - printf '[registries.forgejo]\ntoken = "Bearer %s"\n' "$GIT_AUTH_TOKEN" > $CARGO_HOME/credentials.toml From 9f556744f3ba25425feea111824c81165a805ee5 Mon Sep 17 00:00:00 2001 From: TheDancingDeveloper <306930456+thedancingdeveloper@users.noreply.github.com> Date: Fri, 12 Jun 2026 04:32:25 +0000 Subject: [PATCH 3/6] Update dependencies --- .woodpecker.yml | 10 +++++----- Cargo.toml | 6 +++--- src/peer_store.rs | 4 +++- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/.woodpecker.yml b/.woodpecker.yml index 4934f31..b336956 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -6,7 +6,7 @@ when: steps: - name: fmt - image: rust:1.94-bookworm + image: rust:1.95-bookworm environment: GIT_AUTH_TOKEN: from_secret: git_auth_token @@ -21,7 +21,7 @@ steps: - cargo fmt --all -- --check - name: check - image: rust:1.94-bookworm + image: rust:1.95-bookworm environment: GIT_AUTH_TOKEN: from_secret: git_auth_token @@ -35,7 +35,7 @@ steps: - cargo check --workspace - name: test - image: rust:1.94-bookworm + image: rust:1.95-bookworm environment: GIT_AUTH_TOKEN: from_secret: git_auth_token @@ -49,7 +49,7 @@ steps: - cargo test --workspace - name: clippy - image: rust:1.94-bookworm + image: rust:1.95-bookworm environment: GIT_AUTH_TOKEN: from_secret: git_auth_token @@ -64,7 +64,7 @@ steps: - cargo clippy --workspace -- -D warnings - name: publish - image: rust:1.94-bookworm + image: rust:1.95-bookworm environment: GIT_AUTH_TOKEN: from_secret: git_auth_token diff --git a/Cargo.toml b/Cargo.toml index e550b49..4a72638 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "librtbit-dht" -version = "0.1.2" +version = "0.1.3" edition = "2024" description = "Kademlia DHT implementation for the rtbit BitTorrent client" license = "MIT" @@ -26,7 +26,7 @@ sha1w = { git = "https://github.com/TheDancingDeveloper-org/librtbit-sha1-wrappe anyhow = "1" parking_lot = "0.12" tracing = "0.1" -backon = { version = "1.5", features = ["tokio-sleep"] } +backon = { version = "1.6", features = ["tokio-sleep"] } futures = "0.3" rand = "0.10" indexmap = "2" @@ -36,7 +36,7 @@ tokio-util = "0.7" bytes = "1" librqbit-dualstack-sockets = "0.7" thiserror = "2" -aws-lc-rs = "1.12" +aws-lc-rs = "1.17" [dev-dependencies] tracing-subscriber = { version = "0.3", default-features = false, features = ["fmt"] } diff --git a/src/peer_store.rs b/src/peer_store.rs index dd3dc98..3cfe0fd 100644 --- a/src/peer_store.rs +++ b/src/peer_store.rs @@ -1,4 +1,6 @@ -use std::{collections::VecDeque, net::SocketAddr, str::FromStr, sync::atomic::AtomicU32}; +use std::{ + cmp::Reverse, collections::VecDeque, net::SocketAddr, str::FromStr, sync::atomic::AtomicU32, +}; use bencode::ByteBufOwned; use chrono::{DateTime, TimeDelta, Utc}; From 8ed87cacb9b6161450f1e0f84efd08a3b5c26065 Mon Sep 17 00:00:00 2001 From: TheDancingDeveloper <306930456+thedancingdeveloper@users.noreply.github.com> Date: Fri, 12 Jun 2026 04:56:28 +0000 Subject: [PATCH 4/6] Fix Woodpecker sccache bootstrap --- .woodpecker.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.woodpecker.yml b/.woodpecker.yml index b336956..3c9f145 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -13,7 +13,7 @@ steps: RUSTC_WRAPPER: sccache SCCACHE_REDIS: "redis://100.92.54.45:6380" commands: - - apt-get install -y --no-install-recommends sccache >/dev/null 2>&1 || true + - curl -sSfL "https://github.com/mozilla/sccache/releases/download/v0.8.2/sccache-v0.8.2-x86_64-unknown-linux-musl.tar.gz" | tar -xz -C /tmp && mv /tmp/sccache-v0.8.2-x86_64-unknown-linux-musl/sccache /usr/local/bin/sccache - git config --global url."http://x-access-token:$GIT_AUTH_TOKEN@100.92.54.45:3002/".insteadOf "http://100.92.54.45:3002/" - printf '[registries.forgejo]\nindex = "sparse+https://repo.indexarr.net/api/packages/indexarr/cargo/"\ncredential-provider = "cargo:token"\n\n[registry]\ndefault = "forgejo"\n' > $CARGO_HOME/config.toml - printf '[registries.forgejo]\ntoken = "Bearer %s"\n' "$GIT_AUTH_TOKEN" > $CARGO_HOME/credentials.toml @@ -28,7 +28,7 @@ steps: RUSTC_WRAPPER: sccache SCCACHE_REDIS: "redis://100.92.54.45:6380" commands: - - apt-get install -y --no-install-recommends sccache >/dev/null 2>&1 || true + - curl -sSfL "https://github.com/mozilla/sccache/releases/download/v0.8.2/sccache-v0.8.2-x86_64-unknown-linux-musl.tar.gz" | tar -xz -C /tmp && mv /tmp/sccache-v0.8.2-x86_64-unknown-linux-musl/sccache /usr/local/bin/sccache - git config --global url."http://x-access-token:$GIT_AUTH_TOKEN@100.92.54.45:3002/".insteadOf "http://100.92.54.45:3002/" - printf '[registries.forgejo]\nindex = "sparse+https://repo.indexarr.net/api/packages/indexarr/cargo/"\ncredential-provider = "cargo:token"\n\n[registry]\ndefault = "forgejo"\n' > $CARGO_HOME/config.toml - printf '[registries.forgejo]\ntoken = "Bearer %s"\n' "$GIT_AUTH_TOKEN" > $CARGO_HOME/credentials.toml @@ -42,7 +42,7 @@ steps: RUSTC_WRAPPER: sccache SCCACHE_REDIS: "redis://100.92.54.45:6380" commands: - - apt-get install -y --no-install-recommends sccache >/dev/null 2>&1 || true + - curl -sSfL "https://github.com/mozilla/sccache/releases/download/v0.8.2/sccache-v0.8.2-x86_64-unknown-linux-musl.tar.gz" | tar -xz -C /tmp && mv /tmp/sccache-v0.8.2-x86_64-unknown-linux-musl/sccache /usr/local/bin/sccache - git config --global url."http://x-access-token:$GIT_AUTH_TOKEN@100.92.54.45:3002/".insteadOf "http://100.92.54.45:3002/" - printf '[registries.forgejo]\nindex = "sparse+https://repo.indexarr.net/api/packages/indexarr/cargo/"\ncredential-provider = "cargo:token"\n\n[registry]\ndefault = "forgejo"\n' > $CARGO_HOME/config.toml - printf '[registries.forgejo]\ntoken = "Bearer %s"\n' "$GIT_AUTH_TOKEN" > $CARGO_HOME/credentials.toml @@ -56,7 +56,7 @@ steps: RUSTC_WRAPPER: sccache SCCACHE_REDIS: "redis://100.92.54.45:6380" commands: - - apt-get install -y --no-install-recommends sccache >/dev/null 2>&1 || true + - curl -sSfL "https://github.com/mozilla/sccache/releases/download/v0.8.2/sccache-v0.8.2-x86_64-unknown-linux-musl.tar.gz" | tar -xz -C /tmp && mv /tmp/sccache-v0.8.2-x86_64-unknown-linux-musl/sccache /usr/local/bin/sccache - git config --global url."http://x-access-token:$GIT_AUTH_TOKEN@100.92.54.45:3002/".insteadOf "http://100.92.54.45:3002/" - printf '[registries.forgejo]\nindex = "sparse+https://repo.indexarr.net/api/packages/indexarr/cargo/"\ncredential-provider = "cargo:token"\n\n[registry]\ndefault = "forgejo"\n' > $CARGO_HOME/config.toml - printf '[registries.forgejo]\ntoken = "Bearer %s"\n' "$GIT_AUTH_TOKEN" > $CARGO_HOME/credentials.toml From 44339936e1fd8013e68c60cbdf7695aef34ffc73 Mon Sep 17 00:00:00 2001 From: TheDancingDeveloper <306930456+thedancingdeveloper@users.noreply.github.com> Date: Fri, 12 Jun 2026 05:07:26 +0000 Subject: [PATCH 5/6] Remove stale Renovate trigger --- .woodpecker.yml | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/.woodpecker.yml b/.woodpecker.yml index 3c9f145..f5a125f 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -76,22 +76,6 @@ steps: - event: push branch: main - - name: trigger-renovate - image: alpine/curl - environment: - WOODPECKER_TOKEN: - from_secret: woodpecker_token - commands: - - | - curl -sf -X POST \ - "https://ci.indexarr.net/api/repos/indexarr/renovate/pipelines" \ - -H "Authorization: Bearer $WOODPECKER_TOKEN" \ - -H "Content-Type: application/json" \ - -d '{"branch":"main"}' - when: - - event: push - branch: main - - name: discord-success image: alpine/curl environment: @@ -101,7 +85,7 @@ steps: - | curl -s -X POST "$DISCORD_WEBHOOK_URL" \ -H "Content-Type: application/json" \ - -d "{\"embeds\":[{\"title\":\"librtbit-dht published\",\"description\":\"Published to Forgejo registry. Renovate scan triggered.\",\"color\":3066993}]}" + -d "{\"embeds\":[{\"title\":\"librtbit-dht published\",\"description\":\"Published to Forgejo registry.\",\"color\":3066993}]}" when: - event: push branch: main From 756256c77d79fe6243fe02111105e5d64e91bbdd Mon Sep 17 00:00:00 2001 From: TheDancingDeveloper <306930456+thedancingdeveloper@users.noreply.github.com> Date: Tue, 14 Jul 2026 02:45:52 +0000 Subject: [PATCH 6/6] feat: release monorepo improvements --- Cargo.lock | 2 +- Cargo.toml | 2 +- src/dht.rs | 5 +++++ src/lib.rs | 5 +++++ src/peer_store.rs | 4 +--- 5 files changed, 13 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e44ed1f..525777b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -779,7 +779,7 @@ dependencies = [ [[package]] name = "librtbit-dht" -version = "0.1.1" +version = "0.1.4" dependencies = [ "anyhow", "aws-lc-rs", diff --git a/Cargo.toml b/Cargo.toml index 4a72638..80533da 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "librtbit-dht" -version = "0.1.3" +version = "0.1.4" edition = "2024" description = "Kademlia DHT implementation for the rtbit BitTorrent client" license = "MIT" diff --git a/src/dht.rs b/src/dht.rs index d92d265..4c50ea0 100644 --- a/src/dht.rs +++ b/src/dht.rs @@ -1446,6 +1446,11 @@ impl DhtState { self.listen_addr } + /// Ping a node learned from a BEP 5 peer-wire PORT message. + pub async fn ping(&self, addr: SocketAddr) -> crate::Result<()> { + self.request(Request::Ping, addr).await.map(|_| ()) + } + pub fn stats(&self) -> DhtStats { self.get_stats() } diff --git a/src/lib.rs b/src/lib.rs index cd42a86..261fcd4 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -18,6 +18,11 @@ pub use crate::dht::{DhtConfig, DhtState, RequestPeersStream}; pub use librtbit_core::hash_id::Id20; pub use persistence::{PersistentDht, PersistentDhtConfig}; +/// Parse a bencoded DHT packet. Exposed for parser hardening and fuzzing. +pub fn deserialize_message(buf: &[u8]) -> anyhow::Result<()> { + bprotocol::deserialize_message::>(buf).map(|_| ()) +} + pub type Dht = Arc; // How long do we wait for a response from a DHT node. diff --git a/src/peer_store.rs b/src/peer_store.rs index 3cfe0fd..dd3dc98 100644 --- a/src/peer_store.rs +++ b/src/peer_store.rs @@ -1,6 +1,4 @@ -use std::{ - cmp::Reverse, collections::VecDeque, net::SocketAddr, str::FromStr, sync::atomic::AtomicU32, -}; +use std::{collections::VecDeque, net::SocketAddr, str::FromStr, sync::atomic::AtomicU32}; use bencode::ByteBufOwned; use chrono::{DateTime, TimeDelta, Utc};