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