-
Notifications
You must be signed in to change notification settings - Fork 51
Open
Labels
- Admin -Enjoyable to Install and Setup our SoftwareEnjoyable to Install and Setup our Software- Developer -Torrust Improvement ExperienceTorrust Improvement ExperienceCode Cleanup / RefactoringTidying and Making NeatTidying and Making NeatEasyGood for NewcomersGood for NewcomersTestingChecking TorrustChecking Torrustgood first issueGood for newcomersGood for newcomers
Milestone
Description
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 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.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
- Admin -Enjoyable to Install and Setup our SoftwareEnjoyable to Install and Setup our Software- Developer -Torrust Improvement ExperienceTorrust Improvement ExperienceCode Cleanup / RefactoringTidying and Making NeatTidying and Making NeatEasyGood for NewcomersGood for NewcomersTestingChecking TorrustChecking Torrustgood first issueGood for newcomersGood for newcomers
Type
Projects
Status
No status