Skip to main content

EslHeaders

Struct EslHeaders 

Source
pub struct EslHeaders(/* private fields */);
Expand description

A flat header store that decodes FreeSWITCH ARRAY and bracket encoding when answering typed SIP header queries.

Construct with EslHeaders::new or EslHeaders::from_map. Use it anywhere a HeaderLookup or SipHeaderLookup implementor is expected:

use freeswitch_types::{EslHeaders, HeaderLookup};
use freeswitch_types::sip_header::SipHeaderLookup;

let mut h = EslHeaders::new();
h.insert("Unique-ID", "abc-123");
h.insert("Call-Info", "ARRAY::<sip:a@example.com>;purpose=icon|:<sip:b@example.com>");

assert_eq!(h.header_str("Unique-ID"), Some("abc-123"));
let ci = h.call_info().unwrap().unwrap();
assert_eq!(ci.entries().len(), 2);

HeaderLookup delegates straight to the map; SipHeaderLookup methods that parse RFC-structured values (call_info, history_info, and any future multi-value parsers) first peel the FreeSWITCH encoding and then hand pre-split entries to sip-header. Non-parsing lookups (sip_header_str, sip_header) return the raw stored value untouched — the caller sees exactly what FreeSWITCH put on the wire.

Implementations§

Source§

impl EslHeaders

Source

pub fn new() -> Self

Create an empty store.

Source

pub fn from_map(map: IndexMap<String, String>) -> Self

Wrap an existing map.

Source

pub fn as_map(&self) -> &IndexMap<String, String>

Access the underlying map.

Source

pub fn into_map(self) -> IndexMap<String, String>

Consume and return the underlying map.

Source

pub fn insert(&mut self, key: impl Into<String>, value: impl Into<String>)

Insert a header, replacing any existing entry at the same key.

Source

pub fn remove(&mut self, key: &str) -> Option<String>

Remove a header by key.

Source

pub fn len(&self) -> usize

Number of entries.

Source

pub fn is_empty(&self) -> bool

true if there are no entries.

Source§

impl EslHeaders

Source

pub fn parse_uri_info(value: &str) -> Result<UriInfo, UriInfoError>

Parse a FreeSWITCH-transported SIP URI-list value into typed UriInfo entries, handling both ARRAY:: encoding and bracket wrapping.

Use this when you hold a raw value — e.g. the sip_call_info / sip_alert_info channel variable fetched over ESL — rather than a populated EslHeaders. It accepts any of the forms FreeSWITCH emits:

  • Single RFC entry: <sip:a@example.test>;purpose=emergency-CallId
  • ARRAY encoding: ARRAY::<sip:a@example.test>;purpose=icon|:<sip:b@example.test>
  • Bracket-wrapped: [<sip:a@example.test>;purpose=icon]

This is the same decoding the call_info and alert_info methods apply; iterate the result via .entries().

§Errors

Returns UriInfoError if the value is malformed or if the ARRAY:: structure is invalid. Structural EslArrayError cases (e.g. TooManyItems) are surfaced via UriInfoError::MissingAngleBrackets carrying the cause so operators see the actual reason in logs.

§Example
use freeswitch_types::EslHeaders;

let value = "ARRAY::<urn:emergency:uid:callid:bcf.test>;purpose=emergency-CallId\
             |:<urn:emergency:uid:incidentid:bcf.test>;purpose=emergency-IncidentId";
let info = EslHeaders::parse_uri_info(value).unwrap();
assert_eq!(info.entries().len(), 2);
Source

pub fn parse_history_info(value: &str) -> Result<HistoryInfo, HistoryInfoError>

Parse a FreeSWITCH-transported History-Info value into a typed HistoryInfo, handling both ARRAY:: encoding and bracket wrapping.

The raw-value counterpart to history_info.

§Errors

Structural EslArrayError cases (e.g. TooManyItems) are surfaced as HistoryInfoError::Empty rather than silently falling back — upstream lacks a richer variant for non-entry array failures.

Trait Implementations§

Source§

impl Clone for EslHeaders

Source§

fn clone(&self) -> EslHeaders

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 EslHeaders

Source§

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

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

impl Default for EslHeaders

Source§

fn default() -> EslHeaders

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for EslHeaders

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl From<IndexMap<String, String>> for EslHeaders

Source§

fn from(map: IndexMap<String, String>) -> Self

Converts to this type from the input type.
Source§

impl HeaderLookup for EslHeaders

Source§

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

Look up a header by its raw wire name (e.g. "Unique-ID").
Source§

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

Look up a channel variable by its bare name (e.g. "sip_call_id"). Read more
Source§

fn header(&self, name: EventHeader) -> Option<&str>

Look up a header by its EventHeader enum variant.
Source§

fn variable(&self, name: impl VariableName) -> Option<&str>

Look up a channel variable by its typed enum variant.
Source§

fn unique_id(&self) -> Option<&str>

Unique-ID header, falling back to Caller-Unique-ID.
Source§

fn job_uuid(&self) -> Option<&str>

Job-UUID header from bgapi BACKGROUND_JOB events.
Source§

fn channel_name(&self) -> Option<&str>

Channel-Name header (e.g. sofia/internal/1000@domain).
Source§

fn caller_id_number(&self) -> Option<&str>

Caller-Caller-ID-Number header.
Source§

fn caller_id_name(&self) -> Option<&str>

Caller-Caller-ID-Name header.
Source§

fn destination_number(&self) -> Option<&str>

Caller-Destination-Number header.
Source§

fn callee_id_number(&self) -> Option<&str>

Caller-Callee-ID-Number header.
Source§

fn callee_id_name(&self) -> Option<&str>

Caller-Callee-ID-Name header.
Source§

fn channel_presence_id(&self) -> Option<&str>

Channel-Presence-ID header (e.g. 1000@example.com).
Source§

fn presence_call_direction( &self, ) -> Result<Option<CallDirection>, ParseCallDirectionError>

Presence-Call-Direction header, parsed into a CallDirection.
Source§

fn event_date_timestamp(&self) -> Option<&str>

Event-Date-Timestamp header (microseconds since epoch).
Source§

fn event_sequence(&self) -> Option<&str>

Event-Sequence header (sequential event counter).
Source§

fn dtmf_duration(&self) -> Option<&str>

DTMF-Duration header (digit duration in milliseconds).
Source§

fn dtmf_source(&self) -> Option<&str>

DTMF-Source header (e.g. rtp, inband).
Source§

fn hangup_cause(&self) -> Result<Option<HangupCause>, ParseHangupCauseError>

Parse the Hangup-Cause header into a HangupCause. Read more
Source§

fn event_subclass(&self) -> Option<&str>

Event-Subclass header for CUSTOM events (e.g. sofia::register).
Source§

fn sofia_event_subclass( &self, ) -> Result<Option<SofiaEventSubclass>, ParseSofiaEventSubclassError>

Parse Event-Subclass as a typed SofiaEventSubclass. Read more
Source§

fn gateway(&self) -> Option<&str>

Gateway header from sofia::gateway_state / sofia::gateway_add events.
Source§

fn profile_name(&self) -> Option<&str>

profile-name header from sofia::sip_user_state events.
Source§

fn phrase(&self) -> Option<&str>

Phrase header (SIP reason phrase) from sofia state events.
Source§

fn sip_status_code(&self) -> Result<Option<u16>, ParseIntError>

Status header (SIP response code) from sofia::gateway_state and sofia::sip_user_state events.
Source§

fn gateway_reg_state( &self, ) -> Result<Option<GatewayRegState>, ParseGatewayRegStateError>

Parse the State header as a GatewayRegState. Read more
Source§

fn gateway_ping_status( &self, ) -> Result<Option<GatewayPingStatus>, ParseGatewayPingStatusError>

Parse Ping-Status as a GatewayPingStatus. Read more
Source§

fn sip_user_ping_status( &self, ) -> Result<Option<SipUserPingStatus>, ParseSipUserPingStatusError>

Parse Ping-Status as a SipUserPingStatus. Read more
Source§

fn pl_data(&self) -> Option<&str>

pl_data header – SIP NOTIFY body content from NOTIFY_IN events. Read more
Source§

fn sip_event(&self) -> Option<&str>

event header – SIP event package name from NOTIFY_IN events. Read more
Source§

fn gateway_name(&self) -> Option<&str>

gateway_name header – gateway that received a SIP NOTIFY.
Source§

fn channel_state(&self) -> Result<Option<ChannelState>, ParseChannelStateError>

Parse the Channel-State header into a ChannelState. Read more
Source§

fn channel_state_number( &self, ) -> Result<Option<ChannelState>, ParseChannelStateError>

Parse the Channel-State-Number header into a ChannelState. Read more
Source§

fn call_state(&self) -> Result<Option<CallState>, ParseCallStateError>

Parse the Channel-Call-State header into a CallState. Read more
Source§

fn answer_state(&self) -> Result<Option<AnswerState>, ParseAnswerStateError>

Parse the Answer-State header into an AnswerState. Read more
Source§

fn call_direction( &self, ) -> Result<Option<CallDirection>, ParseCallDirectionError>

Parse the Call-Direction header into a CallDirection. Read more
Source§

fn priority(&self) -> Result<Option<EslEventPriority>, ParsePriorityError>

Parse the priority header value. Read more
Source§

fn timetable( &self, prefix: &str, ) -> Result<Option<ChannelTimetable>, ParseTimetableError>

Extract timetable from timestamp headers with the given prefix. Read more
Source§

fn caller_timetable( &self, ) -> Result<Option<ChannelTimetable>, ParseTimetableError>

Caller-leg channel timetable (Caller-*-Time headers).
Source§

fn other_leg_timetable( &self, ) -> Result<Option<ChannelTimetable>, ParseTimetableError>

Other-leg channel timetable (Other-Leg-*-Time headers).
Source§

impl PartialEq for EslHeaders

Source§

fn eq(&self, other: &EslHeaders) -> 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 Serialize for EslHeaders

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl SipHeaderLookup for EslHeaders

Source§

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

Look up a SIP header by its canonical name (e.g. "Call-Info").
Source§

fn call_info(&self) -> Result<Option<UriInfo>, UriInfoError>

Parse the Call-Info header into a UriInfo. Read more
Source§

fn history_info(&self) -> Result<Option<HistoryInfo>, HistoryInfoError>

Parse the History-Info header into a HistoryInfo. Read more
Source§

fn alert_info(&self) -> Result<Option<UriInfo>, UriInfoError>

Parse Alert-Info into a UriInfo (RFC 3261 §20.4).
Source§

fn sip_header(&self, name: SipHeader) -> Option<&str>

Look up a SIP header by its SipHeader enum variant.
Source§

fn sip_header_all_str<'a>(&'a self, name: &str) -> Vec<&'a str>

Return all occurrences of a header by canonical name. Read more
Source§

fn sip_header_all(&self, name: SipHeader) -> Vec<&str>

Return all occurrences of a header by SipHeader variant.
Source§

fn p_asserted_identity( &self, ) -> Result<Vec<SipHeaderAddr>, ParseSipHeaderAddrError>

Parse P-Asserted-Identity into a list of SipHeaderAddr. Read more
Source§

fn p_preferred_identity( &self, ) -> Result<Vec<SipHeaderAddr>, ParseSipHeaderAddrError>

Parse P-Preferred-Identity into a list of SipHeaderAddr (RFC 3325).
Source§

fn route(&self) -> Result<Vec<SipHeaderAddr>, ParseSipHeaderAddrError>

Parse Route into a list of SipHeaderAddr (RFC 3261 §20.34).
Source§

fn record_route(&self) -> Result<Vec<SipHeaderAddr>, ParseSipHeaderAddrError>

Parse Record-Route into a list of SipHeaderAddr (RFC 3261 §20.30).
Source§

fn path(&self) -> Result<Vec<SipHeaderAddr>, ParseSipHeaderAddrError>

Parse Path into a list of SipHeaderAddr (RFC 3327).
Source§

fn service_route(&self) -> Result<Vec<SipHeaderAddr>, ParseSipHeaderAddrError>

Parse Service-Route into a list of SipHeaderAddr (RFC 3608).
Source§

fn contact(&self) -> Result<Vec<ContactValue>, ParseSipHeaderAddrError>

Parse Contact into a list of ContactValue (RFC 3261 §20.10). Read more
Source§

fn error_info(&self) -> Result<Option<UriInfo>, UriInfoError>

Parse Error-Info into a UriInfo (RFC 3261 §20.18).
Source§

fn allow(&self) -> Vec<&str>

Allow header values as individual method tokens (RFC 3261 §20.5).
Source§

fn supported(&self) -> Vec<&str>

Supported header values as individual option-tag tokens (RFC 3261 §20.37).
Source§

fn require_header(&self) -> Vec<&str>

Require header values as individual option-tag tokens (RFC 3261 §20.32).
Source§

fn proxy_require(&self) -> Vec<&str>

Proxy-Require values as individual option-tag tokens (RFC 3261 §20.29).
Source§

fn unsupported(&self) -> Vec<&str>

Unsupported values as individual option-tag tokens (RFC 3261 §20.40).
Source§

fn allow_events(&self) -> Vec<&str>

Allow-Events values as individual event-type tokens (RFC 6665).
Source§

fn content_encoding(&self) -> Vec<&str>

Content-Encoding values as individual tokens (RFC 3261 §20.12).
Source§

fn content_language(&self) -> Vec<&str>

Content-Language values as individual language tags (RFC 3261 §20.13).
Source§

fn in_reply_to(&self) -> Vec<&str>

In-Reply-To values as individual Call-ID tokens (RFC 3261 §20.21).
Source§

fn via(&self) -> Result<Option<SipVia>, SipViaError>

Parse Via into a SipVia (RFC 3261 §20.42).
Source§

fn authorization(&self) -> Result<Vec<SipAuthValue>, SipAuthError>

Parse Authorization into a list of SipAuthValue (RFC 3261 §20.7). Read more
Source§

fn proxy_authorization(&self) -> Result<Vec<SipAuthValue>, SipAuthError>

Parse Proxy-Authorization into a list of SipAuthValue (RFC 3261 §20.28).
Source§

fn www_authenticate(&self) -> Result<Vec<SipAuthValue>, SipAuthError>

Parse WWW-Authenticate into a list of SipAuthValue (RFC 3261 §20.44).
Source§

fn proxy_authenticate(&self) -> Result<Vec<SipAuthValue>, SipAuthError>

Parse Proxy-Authenticate into a list of SipAuthValue (RFC 3261 §20.27).
Source§

fn warning(&self) -> Result<Option<SipWarning>, SipWarningError>

Parse Warning into a SipWarning (RFC 3261 §20.43).
Source§

fn security_client(&self) -> Result<Option<SipSecurity>, SipSecurityError>

Parse Security-Client into a SipSecurity (RFC 3329).
Source§

fn security_server(&self) -> Result<Option<SipSecurity>, SipSecurityError>

Parse Security-Server into a SipSecurity (RFC 3329).
Source§

fn security_verify(&self) -> Result<Option<SipSecurity>, SipSecurityError>

Parse Security-Verify into a SipSecurity (RFC 3329).
Source§

fn accept(&self) -> Result<Option<SipAccept>, SipAcceptError>

Parse Accept into a SipAccept (RFC 3261 §20.1).
Source§

fn accept_encoding( &self, ) -> Result<Option<SipAcceptEncoding>, SipAcceptEncodingError>

Parse Accept-Encoding into a SipAcceptEncoding (RFC 3261 §20.2).
Source§

fn accept_language( &self, ) -> Result<Option<SipAcceptLanguage>, SipAcceptLanguageError>

Parse Accept-Language into a SipAcceptLanguage (RFC 3261 §20.3).
Source§

impl Eq for EslHeaders

Source§

impl StructuralPartialEq for EslHeaders

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, 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.
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,