Parent issue: #669
When you run the UDP tracker client:
cargo run --bin udp_tracker_client announce 127.0.0.1:6969 9c38422213e30bff212b30c360d26f9a02136422
You could receive a response that can't be parsed into an aquatic UDP response. In this case, we should print the response.
This implies changing the UdtpTrackerClient to return an error with the received packet.
#[allow(clippy::module_name_repetitions)]
#[derive(Debug)]
pub struct UdpTrackerClient {
pub udp_client: UdpClient,
}
impl UdpTrackerClient {
/// # Panics
///
/// Will panic if can't write request to bytes.
pub async fn send(&self, request: Request) -> usize {
debug!(target: "UDP tracker client", "send request {request:?}");
// Write request into a buffer
let request_buffer = vec![0u8; MAX_PACKET_SIZE];
let mut cursor = Cursor::new(request_buffer);
let request_data = match request.write(&mut cursor) {
Ok(()) => {
#[allow(clippy::cast_possible_truncation)]
let position = cursor.position() as usize;
let inner_request_buffer = cursor.get_ref();
// Return slice which contains written request data
&inner_request_buffer[..position]
}
Err(e) => panic!("could not write request to bytes: {e}."),
};
self.udp_client.send(request_data).await
}
/// # Panics
///
/// Will panic if can't create response from the received payload (bytes buffer).
pub async fn receive(&self) -> Response {
let mut response_buffer = [0u8; MAX_PACKET_SIZE];
let payload_size = self.udp_client.receive(&mut response_buffer).await;
debug!(target: "UDP tracker client", "received {payload_size} bytes. Response {response_buffer:?}");
Response::from_bytes(&response_buffer[..payload_size], true).unwrap()
}
}
As you can see on this line:
Response::from_bytes(&response_buffer[..payload_size], true).unwrap()
The client would panic if it received a response that could be deserialized into a valid aquatic response.
We have to change the signature of the receive function to return a Result<Response, Error>. The error can contain the data received.
You can get a list of UDP trackers from https://newtrackon.com/. The client should print all the responses from all those trackers.
Parent issue: #669
When you run the UDP tracker client:
cargo run --bin udp_tracker_client announce 127.0.0.1:6969 9c38422213e30bff212b30c360d26f9a02136422You could receive a response that can't be parsed into an aquatic UDP response. In this case, we should print the response.
This implies changing the
UdtpTrackerClientto return an error with the received packet.As you can see on this line:
The client would panic if it received a response that could be deserialized into a valid aquatic response.
We have to change the signature of the
receivefunction to return aResult<Response, Error>. The error can contain the data received.You can get a list of UDP trackers from https://newtrackon.com/. The client should print all the responses from all those trackers.