Logging for UDP trackers

This commit is contained in:
Igor Katson 2024-02-26 09:42:06 +00:00
parent e263441fb6
commit b30ee13388
No known key found for this signature in database
GPG key ID: B4EC22B66D61A3F5
3 changed files with 15 additions and 5 deletions

View file

@ -96,7 +96,6 @@ pub fn init_logging(opts: InitLoggingOptions) -> anyhow::Result<InitLoggingResul
std::fs::OpenOptions::new() std::fs::OpenOptions::new()
.create(true) .create(true)
.append(true) .append(true)
.write(true)
.open(&log_file) .open(&log_file)
.with_context(|| format!("error opening log file {:?}", log_file))?, .with_context(|| format!("error opening log file {:?}", log_file))?,
)); ));

View file

@ -10,6 +10,7 @@ use tokio_util::sync::CancellationToken;
use tracing::debug; use tracing::debug;
use tracing::error_span; use tracing::error_span;
use tracing::info; use tracing::info;
use tracing::trace;
use url::Url; use url::Url;
use crate::tracker_comms_http; use crate::tracker_comms_http;
@ -96,6 +97,7 @@ impl TrackerComms {
if tracker.starts_with("http://") || tracker.starts_with("https://") { if tracker.starts_with("http://") || tracker.starts_with("https://") {
spawn_with_cancel( spawn_with_cancel(
error_span!( error_span!(
parent: None,
"http_tracker", "http_tracker",
tracker = tracker, tracker = tracker,
info_hash = ?self.info_hash info_hash = ?self.info_hash
@ -109,7 +111,7 @@ impl TrackerComms {
); );
} else if tracker.starts_with("udp://") { } else if tracker.starts_with("udp://") {
spawn_with_cancel( spawn_with_cancel(
error_span!("udp_tracker", tracker = tracker), error_span!(parent: None, "udp_tracker", tracker = tracker, info_hash = ?self.info_hash),
self.cancellation_token.clone(), self.cancellation_token.clone(),
{ {
let comms = self; let comms = self;
@ -206,6 +208,7 @@ impl TrackerComms {
let mut sleep_interval: Option<Duration> = None; let mut sleep_interval: Option<Duration> = None;
loop { loop {
if let Some(i) = sleep_interval { if let Some(i) = sleep_interval {
trace!(interval=?sleep_interval, "sleeping");
tokio::time::sleep(i).await; tokio::time::sleep(i).await;
} }
@ -222,6 +225,7 @@ impl TrackerComms {
match requester.announce(request).await { match requester.announce(request).await {
Ok(response) => { Ok(response) => {
trace!(len = response.addrs.len(), "received announce response");
for addr in response.addrs { for addr in response.addrs {
self.tx self.tx
.send(SocketAddr::V4(addr)) .send(SocketAddr::V4(addr))

View file

@ -4,6 +4,7 @@ use anyhow::{bail, Context};
use librqbit_core::hash_id::Id20; use librqbit_core::hash_id::Id20;
use rand::Rng; use rand::Rng;
use tokio::net::ToSocketAddrs; use tokio::net::ToSocketAddrs;
use tracing::trace;
const ACTION_CONNECT: u32 = 0; const ACTION_CONNECT: u32 = 0;
const ACTION_ANNOUNCE: u32 = 1; const ACTION_ANNOUNCE: u32 = 1;
@ -190,6 +191,7 @@ impl UdpTrackerRequester {
let mut write_buf = Vec::new(); let mut write_buf = Vec::new();
let mut read_buf = vec![0u8; 4096]; let mut read_buf = vec![0u8; 4096];
trace!("sending connect request");
Request::Connect.serialize(tid, &mut write_buf); Request::Connect.serialize(tid, &mut write_buf);
sock.send(&write_buf) sock.send(&write_buf)
@ -206,12 +208,15 @@ impl UdpTrackerRequester {
if tid != rtid { if tid != rtid {
bail!("expected transaction id {} == {}", tid, rtid); bail!("expected transaction id {} == {}", tid, rtid);
} }
trace!(response=?response, "received");
let connection_id = match response { let connection_id = match response {
Response::Connect(connection_id) => connection_id, Response::Connect(connection_id) => connection_id,
other => bail!("unexpected response {other:?}"), other => bail!("unexpected response {other:?}"),
}; };
trace!(connection_id);
Ok(Self { Ok(Self {
sock, sock,
connection_id, connection_id,
@ -233,7 +238,7 @@ impl UdpTrackerRequester {
let tid = new_transaction_id(); let tid = new_transaction_id();
self.write_buf.clear(); self.write_buf.clear();
let size = request.serialize(tid, &mut self.write_buf); let size = request.serialize(tid, &mut self.write_buf);
trace!(request=?request, tid, "sending");
self.sock self.sock
.send(&self.write_buf[..size]) .send(&self.write_buf[..size])
.await .await
@ -241,7 +246,10 @@ impl UdpTrackerRequester {
let size = self.sock.recv(&mut self.read_buf).await.unwrap(); let size = self.sock.recv(&mut self.read_buf).await.unwrap();
let (rtid, response) = Response::parse(&self.read_buf[..size]).unwrap(); let (rtid, response) = Response::parse(&self.read_buf[..size]).unwrap();
assert_eq!(tid, rtid); trace!("received response");
if tid != rtid {
bail!("unexpected transaction id");
}
Ok(response) Ok(response)
} }
} }
@ -251,7 +259,6 @@ mod tests {
use std::{io::Write, str::FromStr}; use std::{io::Write, str::FromStr};
use librqbit_core::{hash_id::Id20, peer_id::generate_peer_id}; use librqbit_core::{hash_id::Id20, peer_id::generate_peer_id};
pub use rand::Rng;
use crate::tracker_comms_udp::{ use crate::tracker_comms_udp::{
new_transaction_id, AnnounceFields, Request, Response, EVENT_NONE, new_transaction_id, AnnounceFields, Request, Response, EVENT_NONE,