Skip to main content

SipHeaderAddr

Struct SipHeaderAddr 

Source
#[non_exhaustive]
pub struct SipHeaderAddr { /* private fields */ }
Expand description

Parsed SIP name-addr (RFC 3261 §25.1) with header-level parameters.

The name-addr production from RFC 3261 §25.1 combines an optional display name with a URI in angle brackets:

name-addr      = [ display-name ] LAQUOT addr-spec RAQUOT
display-name   = *(token LWS) / quoted-string

In SIP headers (From, To, Contact, P-Asserted-Identity, Refer-To), the name-addr is followed by header-level parameters (RFC 3261 §20):

from-spec  = ( name-addr / addr-spec ) *( SEMI from-param )
from-param = tag-param / generic-param

This type handles the full production including those trailing parameters (;tag=, ;expires=, ;serviceurn=, etc.).

Unlike sip_uri::NameAddr (which only handles the name-addr portion), this type also parses header-level parameters after > and can round-trip real SIP header values.

use sip_header::SipHeaderAddr;

let addr: SipHeaderAddr = r#""Alice" <sip:alice@example.com>;tag=abc123"#.parse().unwrap();
assert_eq!(addr.display_name(), Some("Alice"));
assert_eq!(addr.tag(), Some("abc123"));

Display always emits angle brackets around the URI, even for bare addr-spec input. This is the canonical form required by RFC 3261 when header-level parameters are present.

Implementations§

Source§

impl SipHeaderAddr

Source

pub fn new(uri: Uri) -> Self

Create a new SipHeaderAddr with the given URI and no display name or params.

Source

pub fn with_display_name(self, name: impl Into<String>) -> Self

Set the display name.

Source

pub fn with_param( self, key: impl Into<String>, value: Option<impl Into<String>>, ) -> Self

Add a header-level parameter. The key is lowercased on insertion.

Source

pub fn display_name(&self) -> Option<&str>

The display name, if present.

Source

pub fn uri(&self) -> &Uri

The URI.

Source

pub fn sip_uri(&self) -> Option<&SipUri>

If the URI is a SIP/SIPS URI, return a reference to it.

Source

pub fn tel_uri(&self) -> Option<&TelUri>

If the URI is a tel: URI, return a reference to it.

Source

pub fn urn_uri(&self) -> Option<&UrnUri>

If the URI is a URN, return a reference to it.

Source

pub fn params(&self) -> impl Iterator<Item = (&str, Option<&str>)>

Iterator over header-level parameters as (key, raw_value) pairs. Keys are lowercased; values retain their original percent-encoding.

Source

pub fn param( &self, name: &str, ) -> Option<Result<Option<Cow<'_, str>>, Utf8Error>>

Look up a header-level parameter by name (case-insensitive).

Values are percent-decoded and validated as UTF-8. Returns Err if the percent-decoded octets are not valid UTF-8. For non-UTF-8 values or raw wire access, use param_raw().

Returns None if the param is not present, Some(Ok(None)) for flag params (no value), Some(Ok(Some(decoded))) for valued params.

Source

pub fn param_raw(&self, name: &str) -> Option<Option<&str>>

Look up a raw percent-encoded parameter value (case-insensitive).

Returns the raw value without percent-decoding. Use this when round-trip fidelity matters or the value may not be valid UTF-8.

Source

pub fn parse_list( raw: &str, ) -> Result<Vec<SipHeaderAddr>, ParseSipHeaderAddrError>

Parse a comma-separated list of name-addr / addr-spec values.

Splits on commas at bracket depth zero (via split_comma_entries), then parses each entry as a SipHeaderAddr. Returns an empty Vec for empty input. Fails on the first unparseable entry.

Source

pub fn tag(&self) -> Option<&str>

The tag parameter value, if present.

Tag values are simple tokens (never percent-encoded in practice), so this returns &str directly.

Trait Implementations§

Source§

impl Clone for SipHeaderAddr

Source§

fn clone(&self) -> SipHeaderAddr

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for SipHeaderAddr

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for SipHeaderAddr

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Eq for SipHeaderAddr

Source§

impl FromStr for SipHeaderAddr

Source§

type Err = ParseSipHeaderAddrError

The associated error which can be returned from parsing.
Source§

fn from_str(input: &str) -> Result<Self, Self::Err>

Parses a string s to return a value of this type. Read more
Source§

impl PartialEq for SipHeaderAddr

Source§

fn eq(&self, other: &SipHeaderAddr) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for SipHeaderAddr

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.