Struct ClientNonInviteTransaction

Source
pub struct ClientNonInviteTransaction { /* private fields */ }
Expand description

Client non-INVITE transaction implementation as defined in RFC 3261 Section 17.1.2.

This struct implements the state machine for client non-INVITE transactions, which are used for all request methods except INVITE. Non-INVITE transactions have simpler behavior than INVITE transactions, including:

  • No ACK generation required (unlike INVITE transactions)
  • Different timer requirements (Timers E, F, K instead of A, B, D)
  • Different state transitions (e.g., non-INVITE transactions can go from Trying directly to Completed)

Key behaviors:

  • In Trying state: Retransmits request periodically until response or timeout
  • In Proceeding state: Continues retransmissions until final response
  • In Completed state: Has received a final response, waiting for retransmissions
  • In Terminated state: Transaction is finished

Implementations§

Source§

impl ClientNonInviteTransaction

Source

pub fn new( id: TransactionKey, request: Request, remote_addr: SocketAddr, transport: Arc<dyn Transport>, events_tx: Sender<TransactionEvent>, timer_config_override: Option<TimerSettings>, ) -> Result<Self>

Create a new client non-INVITE transaction.

This method creates a new non-INVITE client transaction with the specified parameters. It initializes the transaction data and spawns the transaction runner task.

Non-INVITE transactions are used for all request methods except INVITE, including:

  • REGISTER: For user registration with a SIP registrar
  • OPTIONS: For querying capabilities of a SIP UA or server
  • BYE: For terminating a session
  • CANCEL: For canceling a pending INVITE
  • And others (SUBSCRIBE, NOTIFY, INFO, etc.)
§Arguments
  • id - The unique identifier for this transaction
  • request - The non-INVITE request that initiates this transaction
  • remote_addr - The address to which the request should be sent
  • transport - The transport layer to use for sending messages
  • events_tx - The channel for sending events to the Transaction User
  • timer_config_override - Optional custom timer settings
§Returns

A Result containing the new ClientNonInviteTransaction or an error

Trait Implementations§

Source§

impl ClientTransaction for ClientNonInviteTransaction

Source§

fn initiate(&self) -> Pin<Box<dyn Future<Output = Result<()>> + Send + '_>>

Initiates the transaction by sending the first request. Read more
Source§

fn process_response( &self, response: Response, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + '_>>

Processes an incoming response for this transaction. Read more
Source§

fn original_request( &self, ) -> Pin<Box<dyn Future<Output = Option<Request>> + Send + '_>>

Returns the original request that initiated this transaction. Read more
Source§

fn last_response<'a>( &'a self, ) -> Pin<Box<dyn Future<Output = Option<Response>> + Send + 'a>>

Returns the last response received by this transaction. Read more
Source§

impl Clone for ClientNonInviteTransaction

Source§

fn clone(&self) -> ClientNonInviteTransaction

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 ClientNonInviteTransaction

Source§

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

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

impl Transaction for ClientNonInviteTransaction

Source§

fn id(&self) -> &TransactionKey

Returns the unique key identifying this transaction. The key is typically derived from the branch parameter of the Via header, the method, and directionality.
Source§

fn kind(&self) -> TransactionKind

Returns the TransactionKind of this transaction (e.g., InviteClient, InviteServer).
Source§

fn state(&self) -> TransactionState

Returns the current TransactionState of this transaction (e.g., Trying, Proceeding, Completed).
Source§

fn remote_addr(&self) -> SocketAddr

Returns the network SocketAddr of the remote party involved in this transaction. For client transactions, this is the destination address. For server transactions, it’s the source address.
Source§

fn matches(&self, message: &Message) -> bool

Checks if the given SIP Message (request or response) matches this transaction according to the rules in RFC 3261, Section 17.1.3 (client) and 17.2.3 (server). This involves comparing Via branch, CSeq method and number, From/To tags, Call-ID, etc.
Source§

fn as_any(&self) -> &dyn Any

Provides a way to downcast this transaction object to its concrete type if needed. This is a standard Rust pattern for trait objects.
Source§

impl TransactionAsync for ClientNonInviteTransaction

Source§

fn process_event<'a>( &'a self, event_type: &'a str, message: Option<Message>, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'a>>

Asynchronously processes a significant event relevant to the transaction. Read more
Source§

fn send_command<'a>( &'a self, cmd: InternalTransactionCommand, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'a>>

Sends an InternalTransactionCommand to this transaction for asynchronous processing. Read more
Source§

fn original_request<'a>( &'a self, ) -> Pin<Box<dyn Future<Output = Option<Request>> + Send + 'a>>

Asynchronously retrieves the original SIP request that initiated this transaction. Read more
Source§

fn last_response<'a>( &'a self, ) -> Pin<Box<dyn Future<Output = Option<Response>> + Send + 'a>>

Asynchronously retrieves the last SIP response that was either sent (for server transactions) or received (for client transactions) by this transaction. Read more

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> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> Same for T

Source§

type Output = T

Should always be Self
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> TransactionExt for T
where T: Transaction + ?Sized,

Source§

fn as_client_transaction(&self) -> Option<&(dyn ClientTransaction + 'static)>

Attempts to downcast to a ClientTransaction reference. Read more
Source§

impl<T> TransactionExt for T
where T: Transaction + ?Sized,

Source§

fn as_server_transaction(&self) -> Option<&(dyn ServerTransaction + 'static)>

Attempts to downcast to a ServerTransaction reference. 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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> ErasedDestructor for T
where T: 'static,