1use crate::enums::{ContentType, HandshakeType};
2use crate::error::Error;
3use crate::log::warn;
4use crate::msgs::message::MessagePayload;
5
6macro_rules! require_handshake_msg(
11 ( $m:expr, $handshake_type:path, $payload_type:path ) => (
12 match &$m.payload {
13 MessagePayload::Handshake { parsed: $crate::msgs::handshake::HandshakeMessagePayload(
14 $payload_type(hm),
15 ), .. } => Ok(hm),
16 payload => Err($crate::check::inappropriate_handshake_message(
17 payload,
18 &[$crate::ContentType::Handshake],
19 &[$handshake_type]))
20 }
21 )
22);
23
24macro_rules! require_handshake_msg_move(
26 ( $m:expr, $handshake_type:path, $payload_type:path ) => (
27 match $m.payload {
28 MessagePayload::Handshake { parsed: $crate::msgs::handshake::HandshakeMessagePayload(
29 $payload_type(hm),
30 ), .. } => Ok(hm),
31 payload =>
32 Err($crate::check::inappropriate_handshake_message(
33 &payload,
34 &[$crate::ContentType::Handshake],
35 &[$handshake_type]))
36 }
37 )
38);
39
40pub(crate) fn inappropriate_message(
41 payload: &MessagePayload<'_>,
42 content_types: &[ContentType],
43) -> Error {
44 warn!(
45 "Received a {:?} message while expecting {content_types:?}",
46 payload.content_type(),
47 );
48 Error::InappropriateMessage {
49 expect_types: content_types.to_vec(),
50 got_type: payload.content_type(),
51 }
52}
53
54pub(crate) fn inappropriate_handshake_message(
55 payload: &MessagePayload<'_>,
56 content_types: &[ContentType],
57 handshake_types: &[HandshakeType],
58) -> Error {
59 match payload {
60 MessagePayload::Handshake { parsed, .. } => {
61 let got_type = parsed.0.handshake_type();
62 warn!("Received a {got_type:?} handshake message while expecting {handshake_types:?}",);
63 Error::InappropriateHandshakeMessage {
64 expect_types: handshake_types.to_vec(),
65 got_type,
66 }
67 }
68 payload => inappropriate_message(payload, content_types),
69 }
70}