In this section:
In SIP a single user can have a number of user agents (handsets, softphones, voicemail accounts, etc.) that are all referenced by the same AOR. The is enhanced with the ability to have an identifier addressing a single user agent rather than a group of user agents indicated by an AOR. A URI that routes to a specific UA instance is called a Globally Routable UA URI (GRUU). GRUU facilitates a mechanism for providing a unique user-agent identifier which is globally routable.
A user agent can obtain a GRUU in one of several ways:
As per GRUU procedures, when the UE registers, UE is allocated a GRUU. The same GRUU is used as a Contact header in subsequent dialog-creating request messages. Registrar binds GRUU to AOR and instance. A GRUU is simply a URI; a UA dereferences it in exactly the same way as it would any other URI. The registrar/proxy maps the GRUU to the AOR and determines the set of contacts that the particular UA instance has registered. The GRUU is then mapped to those contacts and the request is routed towards the UA.
A UA that wants to obtain a GRUU via its REGISTER request does so by providing an instance ID in the "+sip.instance" Contact header field parameter. When a UA sends a REGISTER request, it includes Supported header field with “gruu” as one of the option tags. This signifies the registrar that the UA supports the GRUU mechanism. For each contact, the UA includes a "sip.instance" media feature tag whose value will be the instance ID that identifies the UA instance being registered. When a REGISTER is received the registrar checks if there is already a valid public GRUU for the AOR (present in the To header field of the REGISTER request) and the instance ID (present as the content of the "+sip.instance" Contact header field parameter). If there is no valid public GRUU, the registrar constructs a public GRUU. While sending 2xx REGISTER response, Contact header field that contains the "+sip.instance" Contact header field parameter can contain a "pub-gruu" and "temp-gruu" Contact header field parameter. These header field parameters convey the public and a temporary GRUU for the UA instance.
GRUUs are distinguished from other URIs by the presence of a "gr" SIP URI parameter. There are two types of GRUUs; Public GRUUs (P‑GRUUs) and Temporary GRUUs (T‑GRUUs). The user agent uses one of its temporary GRUUs for anonymous calls and public GRUUs for other types of calls. Public GRUUs are distinguished from temporary GRUUs by the presence of a value for the "gr" SIP URI parameter.
Example of public and temporary GRUU:
If the AOR is sip:userA@home.net, the GRUU becomes:
The supports the following message handling for REGISTER:
Pass option-tag with GRUU in Supported header with in REGISTER.
Pass option-tag with GRUU in Require header in REGISTER.
Pass received GRUU parameters in 200 OK response to REGISTER (Enable passCompleteContact transparency or contact header transparency)
The supports handling of dialog-creating messages, including the following:
Pass the contact header transparently in 200 OK for INVITE, SUBSCRIBE, REFER if contact contains GRUU parameters
Pass option-tag with GRUU in Supported header of INVITE, SUBSCRIBE, REFER, NOTIFY, MESSAGE, PUBLISH, OPTIONS and in their 2XX responses
Pass GRUU parameters in the Notify message body
When the terminates call internally/Send Re-Invite Locally (because of LDG/Session Expires/Rx failure), it exhibits the following behavior:
as IBCF: When sending Locally generated BYE on both ingress and egress sides, the sends the Request-Uri with GRUU.
as P-CSCF: The uses the Contact of the last REGISTER as the Request-URI for the BYE sent to the UE.
When a registered contact expires (either due to timeout or explicit de-registration), its binding to the AOR is removed. In addition, its binding to its GRUUs are removed at the same time. If, as a consequence of the expiration of the contact, a particular temporary GRUU no longer has any registered contacts bound to it, then GRUU is invalidated. All of the accumulated temporary GRUUs get invalidated once the last contact for a given instance ID expires.
On Registration timeout, if there is no contact bound to a Public GRUU, the registrar continues to treat the GRUU as valid. Subsequent requests targeted to the GRUU, prior to re-registration of a contact to the GRUU, return a 480 (Temporarily Unavailable) response. Since the GRUU remains valid, it is retained when a contact with that instance ID is once again registered to the AOR. When registrars forcefully shorten registration intervals, the registration event package is used by user agents to learn of these changes.
When a user agent refreshes registration prior to its expiration, the registrar returns back the same public GRUU but creates a new temporary GRUU. All of the temporary GRUUs learned from previous REGISTER responses during the lifetime of a contact remain valid as long as a contact with that instance ID remains registered and the UA does not change the Call-ID in its REGISTER request compared to previous ones. If any dialogs are in progress that utilize a temporary GRUU as a remote target, and a UA performs a registration refresh with a change in Call-ID the temporary GRUUs that were allocated earlier become invalid and the UA is not reachable for subsequent mid-dialog messages. If the Call-ID changes in a register refresh, the server invalidates all temporary GRUUs associated with that UA instance; the only valid one is the new one returned in that REGISTER response. The temporary GRUU is new, and is the only valid temporary GRUU for the instance until the next refresh. When the user agent later creates a new registration with the same instance ID, the public GRUU is the same. A non-2xx response to the REGISTER request has no impact on any existing GRUUs previously provided to the UA.
In SIP networks, a user agent can have multiple AORs either in different domains or within the same domain. When UE supports outbound and the UA is utilizing multiple flows (for purposes of redundancy), the temporary GRUUs remain valid as long as at least one flow is registered. Thus, even if the registration of one flow expires, the temporary GRUUs learned previously remain valid. When the last contact for the instance expires either through explicit de-registration or timeout all of the temporary GRUUs become invalidated.
If the Call-ID changes in a register refresh, the server invalidates all temporary GRUUs associated with that UA instance. If RFC 5626 is in use, this rule applies to the reg-ids: If the Call-ID changes for the registration refresh for a particular reg-id, the server will invalidate all temporary GRUUs associated with that UA instance as a whole. The Registrar checks for any existing contacts registered to the same AOR instance ID. If the contact in the REGISTER request is registering a flow (reg-id), and if there is at least one contact, the registrar finds the one that was most recently registered and examines the Call-ID value associated with that registered contact. If it differs from the one in the REGISTER request, the registrar invalidates all previously generated temporary GRUUs for the AOR, instance ID. Registrar creates a new temporary GRUU for the AOR and instance ID. Every GRUU is associated with a single AOR and a single instance ID. While the AOR resolves to all registered contacts for an AOR, a GRUU resolves only to those contacts whose instance ID matches the one associated with the GRUU. For this reason, a contact with an instance ID is always bound to both a GRUU and its AOR
Once a user agent obtains GRUUs from the registrar, it uses them as the contents of the Contact header field in non-REGISTER requests and responses. The user and host parts of the GRUU learned by the UA in the REGISTER response will be treated opaquely by the UA.
If the serving the calling user of the session and upon detecting that call needs to be terminated because of long duration timer expiry/internal failure, and If the stored Contact header field contains either a public or a temporary GRUU, the generates an BYE request destined for the calling user with Request-URI set to:
The sends the BYE request to UE either:
Upon detecting that call needs to be terminated because of long duration timer expiry/internal failure:
In an IMS deployment, public user identities are used to reach the recipient and single public user identity can be shared among a number of devices under single subscription. It is not possible to identify a specific device when more than one device has been registered with the same public user identity. A Globally Routable User Agent URI (GRUU) is an identity that identifies a unique combination of Public User Identity and UE instance that allows a UE to address a SIP request to a specific Public User Identity UE combination instance.
The S-CSCF provides a service of assigning and translating GRUUs for use by registered UEs. Each assigned GRUU represents an association between a public user identity and an instance ID provided by a registering UE. It is used to address a particular UE that possesses the instance ID and registers with the public user identity. The GRUU also denotes a contact address registered with a public user identity when the contact address has a "+sip.instance" header field parameter containing the GRUU instance ID. The S-CSCF issues GRUUs as part of the registration process, and also reports GRUUs as part of notifications for subscriptions to the "reg" event package.
If a UE supports GRUU, it indicates support for a GRUU that is associated with a specific Public User Identity at the time of registration of the Public User Identity. The UE uses the same instance ID for all registration requests regardless of the access network used for registration. When the S-CSCF receives indication of GRUU support for a specific Public User Identity from the UE during a registration request, it also generates P‑GRUU's and T‑GRUU's for all implicitly registered Public User Identities belonging to the same implicit registration set. The IMS network communicates all these other GRUUs to the UE.
The S-CSCF always issues GRUUs in pairs – a public GRUU and a temporary GRUU. In case of implicit registration the S-CSCF assigns a unique public GRUU and a unique temporary GRUU for each public user identity. The "gr" SIP URI parameter serves as an indicator that the URI is in fact a GRUU. The public GRUU for a particular association of public user identity and instance ID is persistent. The same public GRUU will be returned each time a registration is performed with a particular pair of public user identity and instance ID.
The lifetime of a temporary GRUU is limited, hence the S-CSCF only understands how to translate temporary GRUU to the corresponding public user identity and instance ID. The S-CSCF can recognize a public GRUU as valid if the derived instance ID is a syntactically correct URN and the derived public user identity compares equal, according to the comparison rules of RFC3261, to a public user identity active within the S-CSCF. The public user identity and instance ID are derived from a temporary GRUU via implementation specific means consistent with the way temporary GRUUs are constructed.
If a UE registers (explicitly or implicitly) with multiple Public User Identities, a separate GRUU set is associated with each. If different UEs register with the same Public User Identity, a different GRUU set is associated with each. The IMS network generates the same P‑GRUU for a given Public User Identity and Instance Identifier combination. The IMS network generates a different T‑GRUU for a given Public User Identity and Instance Identifier combination for each registration and re-registration.
In an IMS deployment, the SBC provides the following functionality: