A client transaction is used by a User Agent Client application to send
Request messages to a User Agent Server application.
The client transaction is also used to match Responses from the User Agent
Server to fire Response events to the SipListener for a specific client
transaction. This interfaces enables an application to send a
javax.sip.message.Request 's statefully. A new client transaction
is generated by the application calling the
SipProvider.getNewClientTransaction(Request) method.
A client transaction of the transaction layer is represented by a finite
state machine that is constructed to process a particular request under
the covers of a stateful SipProvider. The transaction layer handles
application-layer retransmissions, matching of responses to requests, and
application-layer timeouts. Any task that a User Agent Client
accomplishes takes place using a series of transactions.
The client transaction must be unique within the underlying
implementation. A common way to create this value is to compute a
cryptographic hash of the To tag, From tag, Call-ID header field, the
Request-URI of the request received (before translation), the topmost Via
header, and the sequence number from the CSeq header field, in addition to
any Proxy-Require and Proxy-Authorization header fields that may be present.
The algorithm used to compute the hash is implementation-dependent.
For the detailed client transaction state machines refer to Chapter
17 of RFC 3261, the
allowable transitions are summarized below:
Invite Transaction:
Calling --> Proceeding --> Completed --> Terminated
Non-Invite Transaction:
Trying --> Proceeding --> Completed --> Terminated
author: BEA Systems, NIST version: 1.2 |