pub struct Error<'a> {
pub code: u16,
pub message: &'a str,
}
Expand description
The ERROR-CODE attribute is used in error response messages. It contains a numeric error code value in the range of 300 to 699 plus a textual reason phrase encoded in UTF-8 RFC3629; it is also consistent in its code assignments and semantics with SIP RFC3261 and HTTP RFC7231. The reason phrase is meant for diagnostic purposes and can be anything appropriate for the error code. Recommended reason phrases for the defined error codes are included in the IANA registry for error codes. The reason phrase MUST be a UTF-8-encoded RFC3629 sequence of fewer than 128 characters (which can be as long as 509 bytes when encoding them or 763 bytes when decoding them).
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reserved, should be 0 |Class| Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reason Phrase (variable) ..
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 7: Format of ERROR-CODE Attribute
To facilitate processing, the class of the error code (the hundreds digit) is encoded separately from the rest of the code, as shown in Figure 7.
The Reserved bits SHOULD be 0 and are for alignment on 32-bit boundaries. Receivers MUST ignore these bits. The Class represents the hundreds digit of the error code. The value MUST be between 3 and 6. The Number represents the binary encoding of the error code modulo 100, and its value MUST be between 0 and 99.
Fields§
§code: u16
§message: &'a str
Implementations§
Source§impl Error<'_>
impl Error<'_>
Sourcepub fn from(code: Kind) -> Self
pub fn from(code: Kind) -> Self
create error from error type.
§Example
use faster_stun::attribute::*;
Error::from(ErrKind::TryAlternate);
Sourcepub fn into(self, buf: &mut BytesMut)
pub fn into(self, buf: &mut BytesMut)
encode the error type as bytes.
§Unit Test
use bytes::BytesMut;
use faster_stun::attribute::*;
let buffer = [
0x00u8, 0x00, 0x03, 0x00, 0x54, 0x72, 0x79, 0x20, 0x41, 0x6c, 0x74,
0x65, 0x72, 0x6e, 0x61, 0x74, 0x65,
];
let mut buf = BytesMut::with_capacity(1280);
let error = Error::from(ErrKind::TryAlternate);
error.into(&mut buf);
assert_eq!(&buf[..], &buffer);
Trait Implementations§
Source§impl<'a> TryFrom<&'a [u8]> for Error<'a>
impl<'a> TryFrom<&'a [u8]> for Error<'a>
Source§fn try_from(packet: &'a [u8]) -> Result<Self, Self::Error>
fn try_from(packet: &'a [u8]) -> Result<Self, Self::Error>
§Unit Test
use faster_stun::attribute::*;
use std::convert::TryFrom;
let buffer = [
0x00u8, 0x00, 0x03, 0x00, 0x54, 0x72, 0x79, 0x20, 0x41, 0x6c, 0x74,
0x65, 0x72, 0x6e, 0x61, 0x74, 0x65,
];
let error = Error::try_from(&buffer[..]).unwrap();
assert_eq!(error.code, ErrKind::TryAlternate as u16);
assert_eq!(error.message, "Try Alternate");