stun_rs/attributes/turn/
requested_address_family.rs1use crate::attributes::turn::address_family::family_address_attribute;
2
3const REQUESTED_ADDRESS_FAMILY: u16 = 0x0017;
4
5family_address_attribute!(
6 RequestedAddressFamily,
16 REQUESTED_ADDRESS_FAMILY,
17);
18
19#[cfg(test)]
20mod tests {
21 use super::*;
22 use crate::attributes::{DecodeAttributeValue, EncodeAttributeValue};
23 use crate::context::{AttributeDecoderContext, AttributeEncoderContext};
24 use crate::error::StunErrorType;
25 use crate::AddressFamily;
26 use crate::StunAttribute;
27
28 #[test]
29 fn decode_requested_address_family_constructor() {
30 let attr = RequestedAddressFamily::new(AddressFamily::IPv4);
31 assert_eq!(attr.family(), AddressFamily::IPv4);
32
33 let attr = RequestedAddressFamily::from(AddressFamily::IPv6);
34 assert_eq!(attr.family(), AddressFamily::IPv6);
35 }
36
37 #[test]
38 fn decode_requested_address_family_value() {
39 let dummy_msg = [];
40 let buffer = [];
41 let ctx = AttributeDecoderContext::new(None, &dummy_msg, &buffer);
42 let result = RequestedAddressFamily::decode(ctx);
43 assert_eq!(
44 result.expect_err("Error expected"),
45 StunErrorType::SmallBuffer
46 );
47
48 let buffer = [0x01, 0x00, 0x00];
49 let ctx = AttributeDecoderContext::new(None, &dummy_msg, &buffer);
50 let result = RequestedAddressFamily::decode(ctx);
51 assert_eq!(
52 result.expect_err("Error expected"),
53 StunErrorType::SmallBuffer
54 );
55
56 let buffer = [0x01, 0x00, 0x00, 0x00];
57 let ctx = AttributeDecoderContext::new(None, &dummy_msg, &buffer);
58 let (attr, size) =
59 RequestedAddressFamily::decode(ctx).expect("Can not decode RequestedAddressFamily");
60 assert_eq!(size, 4);
61 assert_eq!(attr.family(), AddressFamily::IPv4);
62
63 let buffer = [0x02, 0x01, 0x02, 0x03];
64 let ctx = AttributeDecoderContext::new(None, &dummy_msg, &buffer);
65 let (attr, size) =
66 RequestedAddressFamily::decode(ctx).expect("Can not decode RequestedAddressFamily");
67 assert_eq!(size, 4);
68 assert_eq!(attr.family(), AddressFamily::IPv6);
69 }
70
71 #[test]
72 fn encode_requested_address_family_value() {
73 let attr = RequestedAddressFamily::new(AddressFamily::IPv4);
74 let dummy_msg = [];
75
76 let mut buffer = [];
77 let ctx = AttributeEncoderContext::new(None, &dummy_msg, &mut buffer);
78 let result = attr.encode(ctx);
79 assert_eq!(
80 result.expect_err("Error expected"),
81 StunErrorType::SmallBuffer
82 );
83
84 let mut buffer: [u8; 3] = [0xFF; 3];
85 let ctx = AttributeEncoderContext::new(None, &dummy_msg, &mut buffer);
86 let result = attr.encode(ctx);
87 assert_eq!(
88 result.expect_err("Error expected"),
89 StunErrorType::SmallBuffer
90 );
91
92 let mut buffer: [u8; 4] = [0xFF; 4];
93 let ctx = AttributeEncoderContext::new(None, &dummy_msg, &mut buffer);
94 let result = attr.encode(ctx);
95 assert_eq!(result, Ok(4));
96 let expected_buffer = [0x01, 0x00, 0x00, 0x00];
97 assert_eq!(&buffer[..], &expected_buffer[..]);
98
99 let attr = RequestedAddressFamily::new(AddressFamily::IPv6);
100 let mut buffer: [u8; 4] = [0xFF; 4];
101 let ctx = AttributeEncoderContext::new(None, &dummy_msg, &mut buffer);
102 let result = attr.encode(ctx);
103 assert_eq!(result, Ok(4));
104 let expected_buffer = [0x02, 0x00, 0x00, 0x00];
105 assert_eq!(&buffer[..], &expected_buffer[..]);
106 }
107
108 #[test]
109 fn requested_address_family_stunt_attribute() {
110 let attr =
111 StunAttribute::RequestedAddressFamily(RequestedAddressFamily::new(AddressFamily::IPv6));
112 assert!(attr.is_requested_address_family());
113 assert!(attr.as_requested_address_family().is_ok());
114 assert!(attr.as_unknown().is_err());
115
116 assert!(attr.attribute_type().is_comprehension_required());
117 assert!(!attr.attribute_type().is_comprehension_optional());
118
119 let dbg_fmt = format!("{:?}", attr);
120 assert_eq!(
121 "RequestedAddressFamily(RequestedAddressFamily(IPv6))",
122 dbg_fmt
123 );
124 }
125}