aquatic_ws: improve network message reading, handle parse error better

This commit is contained in:
Joakim Frostegård 2021-10-16 17:46:42 +02:00
parent 48d49c9a1a
commit 523a21dac4

View file

@ -206,7 +206,6 @@ pub fn run_handshakes_and_read_messages(
match established_ws.ws.read_message() { match established_ws.ws.read_message() {
Ok(ws_message) => { Ok(ws_message) => {
if let Ok(in_message) = InMessage::from_ws_message(ws_message) {
let naive_peer_addr = established_ws.peer_addr; let naive_peer_addr = established_ws.peer_addr;
let converted_peer_ip = convert_ipv4_mapped_ipv6(naive_peer_addr.ip()); let converted_peer_ip = convert_ipv4_mapped_ipv6(naive_peer_addr.ip());
@ -219,8 +218,8 @@ pub fn run_handshakes_and_read_messages(
debug!("read message"); debug!("read message");
match in_message { match InMessage::from_ws_message(ws_message) {
InMessage::AnnounceRequest(ref request) if !state.access_list.allows(access_list_mode, &request.info_hash.0) => { Ok(InMessage::AnnounceRequest(ref request)) if !state.access_list.allows(access_list_mode, &request.info_hash.0) => {
let out_message = OutMessage::ErrorResponse(ErrorResponse { let out_message = OutMessage::ErrorResponse(ErrorResponse {
failure_reason: "Info hash not allowed".into(), failure_reason: "Info hash not allowed".into(),
action: Some(ErrorResponseAction::Announce), action: Some(ErrorResponseAction::Announce),
@ -229,12 +228,22 @@ pub fn run_handshakes_and_read_messages(
local_responses.push((meta, out_message)); local_responses.push((meta, out_message));
}, },
_ => { Ok(in_message) => {
if let Err(err) = in_message_sender.send((meta, in_message)) { if let Err(err) = in_message_sender.send((meta, in_message)) {
error!("InMessageSender: couldn't send message: {:?}", err); error!("InMessageSender: couldn't send message: {:?}", err);
} }
} }
}; Err(err) => {
info!("error parsing message: {:?}", err);
let out_message = OutMessage::ErrorResponse(ErrorResponse {
failure_reason: "Error parsing message".into(),
action: None,
info_hash: None,
});
local_responses.push((meta, out_message));
}
} }
} }
Err(Io(err)) if err.kind() == ErrorKind::WouldBlock => { Err(Io(err)) if err.kind() == ErrorKind::WouldBlock => {