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) -> SipHeaderAddr

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>) -> SipHeaderAddr

Set the display name.

Source

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

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 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 · 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<(), Error>

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

impl Display for SipHeaderAddr

Source§

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

Formats the value using the given formatter. Read more
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<SipHeaderAddr, <SipHeaderAddr as FromStr>::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 · 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 Eq for SipHeaderAddr

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<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
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.