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

View file

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