3.1.2.5.1 Processing the REGISTER Request

The SIP registrar MUST establish and maintain an SA with the UAC using the NTLM or the Kerberos authentication protocol, as specified in [MS-SIPAE] section 3.2.

When the SA is established, the registrar MUST validate the request according to the rules specified in section 2.2.1.1.

If the validation fails after the registrar inspects the REGISTER request headers, as specified in [RFC3261] section 8.2.2, the registrar SHOULD reject the request with an appropriate error response, as specified in [RFC3261] section 8.2.2. The outgoing SIP error response SHOULD include an ms-diagnostics header or an ms-diagnostics-public header, as described in [MS-OCER] section 2.2.1. The ErrorId to be included in these headers is also listed in the following table.

Special error responses are shown in the following table.

SIP response code

ErrorId

Reason

400

4010

Missing endpoint identifier (Epid and SIP.INSTANCE).

489

4055

Event header is not set to "registration".

421

2057

Supported header does not have gruu-10, but msrtc-event-categories is present.

The registrar retrieves the Epid and SIP.INSTANCE value from the REGISTER request. The registrar tries to find an existing SIP endpoint with an identifier that contains an identical Epid and SIP.INSTANCE. If none is found, this is a new binding for a new UAC. The registrar generates a GRUU as described in [MS-SIPRE] section 2.2.3, and stores the EPID, SIP.INSTANCE, and GRUU in a new SIP endpoint identifier. It then processes the request and, if the request is accepted, it SHOULD set the Routable field of the SIP endpoint identifier to "true".

If the registrar finds an existing SIP endpoint identifier, this is either a REGISTER refresh or a new REGISTER for the same endpoint. In either case, the registrar processes the request as specified in [RFC3261] section 10.3. If it accepts the request, it SHOULD set the Routable field of the SIP endpoint identifier to "true".

The server replaces bindings using SIP.INSTANCE as the primary key.

If the Supports survivable mode field for the UAC is set to "false" and Presence Service Available is "false", the registrar SHOULD<158> reject the request with a 503 Service Unavailable, as specified in [RFC3261] Section 21.5.4. The ms-diagnostics-public ErrorId SHOULD be set to "4164".

If the UAC supports survivable mode, the registrar SHOULD<159> notify the endpoint if the Presence-Service-Available transitions from "true" to "false" using a NOTIFY with the userservices-unavailable event, as defined in section 2.2.1.13.

The registrar SHOULD<160> retrieve the MAC address, version and vendor identifier from the Ms-Device-Info header in the REGISTER request. The information stored in the Ms-Device-Info header SHOULD be used by the server to track the devices that are communicating with it.

The 200 OK response for the REGISTER request is generated as specified in [RFC3261] section 10.3, and the following additional rules:

  • The registrar retrieves the GRUU from the SIP endpoint identifier and returns the GRUU as specified in [IETFDRAFT-OUGRUAUSIP-10] section 8.2 in the response to the REGISTER request.

  • In addition, the registrar SHOULD insert a Presence-State header field into the 200 response to the REGISTER request.

    • The value of the Register-Action field of the Presence-State header is generated as follows:

      • If the REGISTER created a new SIP endpoint, the value is "added".

      • If the REGISTER adds a new binding to an existing SIP endpoint and the Routable field changed from "false" to "true" during processing, the value is "fixed".

      • If the REGISTER refreshes an existing binding for an existing SIP endpoint, the value is "refreshed".

    • The Primary-Cluster-Type<161> field of the Presence-State header is generated as follows.

      • If the Primary-Cluster-Type field is set to "central", the value is "central".

      • If the Primary-Cluster-Type field is set to "remote", the value is "remote".

    • The Is-Connected-To-Primary<162> field of the Presence-State header is generated as follows.

      • If the Is-Connected-To-Primary field is "true", the value is "yes".

      • If the Is-Connected-To-Primary field is "false", the value is "no".

    • The user-services-state<163> field of the Presence-State header is generated as follows.

      • The user-services-state field is set to "unavailable" if the Presence-Service-State field is set to "false".

      • The user-services-state field of the Presence-State header SHOULD NOT be set if the Presence-Service-State field is set to true.

The registrar MAY perform additional actions based on the version of the UAC, as described in section 3.4.2.5.