;;
;; %CopyrightBegin%
;;
;; Copyright Ericsson AB 2010-2011. All Rights Reserved.
;;
;; The contents of this file are subject to the Erlang Public License,
;; Version 1.1, (the "License"); you may not use this file except in
;; compliance with the License. You should have received a copy of the
;; Erlang Public License along with this software. If not, it can be
;; retrieved online at http://www.erlang.org/.
;;
;; Software distributed under the License is distributed on an "AS IS"
;; basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
;; the License for the specific language governing rights and limitations
;; under the License.
;;
;; %CopyrightEnd%
;;

;;
;; RFC 4740, Diameter Session Initiation Protocol (SIP) Application
;;

@id 6

@inherits rfc3588_base
@inherits rfc4590_digest

;; ===========================================================================

@avp_types

    SIP-Accounting-Information          368  Grouped      M
    SIP-Accounting-Server-URI           369  DiameterURI  M
    SIP-Credit-Control-Server-URI       370  DiameterURI  M
    SIP-Server-URI                      371  UTF8String   M
    SIP-Server-Capabilities             372  Grouped      M
    SIP-Mandatory-Capability            373  Unsigned32   M
    SIP-Optional-Capability             374  Unsigned32   M
    SIP-Server-Assignment-Type          375  Enumerated   M
    SIP-Auth-Data-Item                  376  Grouped      M
    SIP-Authentication-Scheme           377  Enumerated   M
    SIP-Item-Number                     378  Unsigned32   M
    SIP-Authenticate                    379  Grouped      M
    SIP-Authorization                   380  Grouped      M
    SIP-Authentication-Info             381  Grouped      M
    SIP-Number-Auth-Items               382  Unsigned32   M
    SIP-Deregistration-Reason           383  Grouped      M
    SIP-Reason-Code                     384  Enumerated   M
    SIP-Reason-Info                     385  UTF8String   M
    SIP-Visited-Network-Id              386  UTF8String   M
    SIP-User-Authorization-Type         387  Enumerated   M
    SIP-Supported-User-Data-Type        388  UTF8String   M
    SIP-User-Data                       389  Grouped      M
    SIP-User-Data-Type                  390  UTF8String   M
    SIP-User-Data-Contents              391  OctetString  M
    SIP-User-Data-Already-Available     392  Enumerated   M
    SIP-Method                          393  UTF8String   M

;; ===========================================================================

@messages

   ;; 8.1.  User-Authorization-Request

   UAR ::= < Diameter Header: 283, REQ, PXY >

           < Session-Id >
           { Auth-Application-Id }
           { Auth-Session-State }
           { Origin-Host }
           { Origin-Realm }
           { Destination-Realm }
           { SIP-AOR }
           [ Destination-Host ]
           [ User-Name ]
           [ SIP-Visited-Network-Id ]
           [ SIP-User-Authorization-Type ]
         * [ Proxy-Info ]
         * [ Route-Record ]
         * [ AVP ]

   ;; 8.2.  User-Authorization-Answer

   UAA ::= < Diameter Header: 283, PXY >

           < Session-Id >
           { Auth-Application-Id }
           { Auth-Session-State }
           { Result-Code }
           { Origin-Host }
           { Origin-Realm }
           [ SIP-Server-URI ]
           [ SIP-Server-Capabilities ]
           [ Authorization-Lifetime ]
           [ Auth-Grace-Period ]
           [ Redirect-Host ]
           [ Redirect-Host-Usage ]
           [ Redirect-Max-Cache-Time ]
         * [ Proxy-Info ]
         * [ Route-Record ]
         * [ AVP ]

   ;; 8.3.  Server-Assignment-Request

   SAR ::= < Diameter Header: 284, REQ, PXY >

           < Session-Id >
           { Auth-Application-Id }
           { Auth-Session-State }
           { Origin-Host }
           { Origin-Realm }
           { Destination-Realm }
           { SIP-Server-Assignment-Type }
           { SIP-User-Data-Already-Available }
           [ Destination-Host ]
           [ User-Name ]
           [ SIP-Server-URI ]
         * [ SIP-Supported-User-Data-Type ]
         * [ SIP-AOR ]
         * [ Proxy-Info ]
         * [ Route-Record ]
         * [ AVP ]

   ;; 8.4.  Server-Assignment-Answer

   SAA ::= < Diameter Header: 284, PXY >

           < Session-Id >
           { Auth-Application-Id }
           { Result-Code }
           { Auth-Session-State }
           { Origin-Host }
           { Origin-Realm }
         * [ SIP-User-Data ]
           [ SIP-Accounting-Information ]
         * [ SIP-Supported-User-Data-Type ]
           [ User-Name ]
           [ Auth-Grace-Period ]
           [ Authorization-Lifetime ]
           [ Redirect-Host ]
           [ Redirect-Host-Usage ]
           [ Redirect-Max-Cache-Time ]
         * [ Proxy-Info ]
         * [ Route-Record ]
         * [ AVP ]

   ;; 8.5.  Location-Info-Request

  LIR ::= < Diameter Header: 285, REQ, PXY >

           < Session-Id >
           { Auth-Application-Id }
           { Auth-Session-State }
           { Origin-Host }
           { Origin-Realm }
           { Destination-Realm }
           { SIP-AOR }
           [ Destination-Host ]
         * [ Proxy-Info ]
         * [ Route-Record ]
         * [ AVP ]

   ;; 8.6.  Location-Info-Answer

   LIA ::= < Diameter Header: 285, PXY >

           < Session-Id >
           { Auth-Application-Id }
           { Result-Code }
           { Auth-Session-State }
           { Origin-Host }
           { Origin-Realm }
           [ SIP-Server-URI ]
           [ SIP-Server-Capabilities ]
           [ Auth-Grace-Period ]
           [ Authorization-Lifetime ]
           [ Redirect-Host ]
           [ Redirect-Host-Usage ]
           [ Redirect-Max-Cache-Time ]
         * [ Proxy-Info ]
         * [ Route-Record ]
         * [ AVP ]

   ;; 8.7.  Multimedia-Auth-Request

   MAR ::= < Diameter Header: 286, REQ, PXY >

           < Session-Id >
           { Auth-Application-Id }
           { Auth-Session-State }
           { Origin-Host }
           { Origin-Realm }
           { Destination-Realm }
           { SIP-AOR }
           { SIP-Method }
           [ Destination-Host ]
           [ User-Name ]
           [ SIP-Server-URI ]
           [ SIP-Number-Auth-Items ]
           [ SIP-Auth-Data-Item ]
         * [ Proxy-Info ]
         * [ Route-Record ]
         * [ AVP ]

   ;; 8.8.  Multimedia-Auth-Answer

   MAA ::= < Diameter Header: 286, PXY >

           < Session-Id >
           { Auth-Application-Id }
           { Result-Code }
           { Auth-Session-State }
           { Origin-Host }
           { Origin-Realm }
           [ User-Name ]
           [ SIP-AOR ]
           [ SIP-Number-Auth-Items ]
         * [ SIP-Auth-Data-Item ]
           [ Authorization-Lifetime ]
           [ Auth-Grace-Period ]
           [ Redirect-Host ]
           [ Redirect-Host-Usage ]
           [ Redirect-Max-Cache-Time ]
         * [ Proxy-Info ]
         * [ Route-Record ]
         * [ AVP ]

   ;; 8.9.  Registration-Termination-Request

   RTR ::= < Diameter Header: 287, REQ, PXY >

           < Session-Id >
           { Auth-Application-Id }
           { Auth-Session-State }
           { Origin-Host }
           { Origin-Realm }
           { Destination-Host }
           { SIP-Deregistration-Reason }
           [ Destination-Realm ]
           [ User-Name ]
         * [ SIP-AOR ]
         * [ Proxy-Info ]
         * [ Route-Record ]
         * [ AVP ]

   ;; 8.10.  Registration-Termination-Answer

   RTA ::= < Diameter Header: 287, PXY >

           < Session-Id >
           { Auth-Application-Id }
           { Result-Code }
           { Auth-Session-State }
           { Origin-Host }
           { Origin-Realm }
           [ Authorization-Lifetime ]
           [ Auth-Grace-Period ]
           [ Redirect-Host ]
           [ Redirect-Host-Usage ]
           [ Redirect-Max-Cache-Time ]
         * [ Proxy-Info ]
         * [ Route-Record ]
         * [ AVP ]

   ;; 8.11.  Push-Profile-Request

   PPR ::= < Diameter Header: 288, REQ, PXY >

           < Session-Id >
           { Auth-Application-Id }
           { Auth-Session-State }
           { Origin-Host }
           { Origin-Realm }
           { Destination-Realm }
           { User-Name }
         * [ SIP-User-Data ]
           [ SIP-Accounting-Information ]
           [ Destination-Host ]
           [ Authorization-Lifetime ]
           [ Auth-Grace-Period ]
         * [ Proxy-Info ]
         * [ Route-Record ]
         * [ AVP ]

   ;; 8.12.  Push-Profile-Answer

   PPA ::= < Diameter Header: 288, PXY >

           < Session-Id >
           { Auth-Application-Id }
           { Result-Code }
           { Auth-Session-State }
           { Origin-Host }
           { Origin-Realm }
           [ Redirect-Host ]
           [ Redirect-Host-Usage ]
           [ Redirect-Max-Cache-Time ]
         * [ Proxy-Info ]
         * [ Route-Record ]
         * [ AVP ]

;; ===========================================================================

@grouped

   SIP-Accounting-Information ::= < AVP Header: 368 >

         * [ SIP-Accounting-Server-URI ]
         * [ SIP-Credit-Control-Server-URI ]
         * [ AVP]

   SIP-Server-Capabilities ::= < AVP Header: 372 >

         * [ SIP-Mandatory-Capability ]
         * [ SIP-Optional-Capability ]
         * [ SIP-Server-URI ]
         * [ AVP ]

   SIP-Auth-Data-Item ::= < AVP Header: 376 >

           { SIP-Authentication-Scheme }
           [ SIP-Item-Number ]
           [ SIP-Authenticate ]
           [ SIP-Authorization ]
           [ SIP-Authentication-Info ]
         * [ AVP ]

   SIP-Authenticate ::= < AVP Header: 379 >

           { Digest-Realm }
           { Digest-Nonce }
           [ Digest-Domain ]
           [ Digest-Opaque ]
           [ Digest-Stale ]
           [ Digest-Algorithm ]
           [ Digest-Qop ]
           [ Digest-HA1]
         * [ Digest-Auth-Param ]
         * [ AVP ]

   SIP-Authorization ::= < AVP Header: 380 >

           { Digest-Username }
           { Digest-Realm }
           { Digest-Nonce }
           { Digest-URI }
           { Digest-Response }
           [ Digest-Algorithm ]
           [ Digest-CNonce ]
           [ Digest-Opaque ]
           [ Digest-Qop ]
           [ Digest-Nonce-Count ]
           [ Digest-Method]
           [ Digest-Entity-Body-Hash ]
         * [ Digest-Auth-Param ]
         * [ AVP ]

   SIP-Authentication-Info ::= < AVP Header: 381 >

           [ Digest-Nextnonce ]
           [ Digest-Qop ]
           [ Digest-Response-Auth ]
           [ Digest-CNonce ]
           [ Digest-Nonce-Count ]
         * [ AVP ]

   SIP-Deregistration-Reason ::= < AVP Header: 383 >

           { SIP-Reason-Code }
           [ SIP-Reason-Info ]
         * [ AVP ]

   SIP-User-Data ::= < AVP Header: 389 >

           { SIP-User-Data-Type }
           { SIP-User-Data-Contents }
         * [ AVP ]

;; ===========================================================================

@enum SIP-Server-Assignment-Type

   NO_ASSIGNMENT                  0
   REGISTRATION                   1
   RE_REGISTRATION                2
   UNREGISTERED_USER              3
   TIMEOUT_DEREGISTRATION         4
   USER_DEREGISTRATION            5
   TIMEOUT_DEREGISTRATION_STORE   6
   USER_DEREGISTRATION_STORE      7
   ADMINISTRATIVE_DEREGISTRATION  8
   AUTHENTICATION_FAILURE         9
   AUTHENTICATION_TIMEOUT        10
   DEREGISTRATION_TOO_MUCH_DATA  11

@enum SIP-Authentication-Scheme

   DIGEST                         0

@enum SIP-Reason-Code

   PERMANENT_TERMINATION          0
   NEW_SIP_SERVER_ASSIGNED        1
   SIP_SERVER_CHANGE              2
   REMOVE_SIP_SERVER              3

@enum SIP-User-Authorization-Type

   REGISTRATION                   0
   DEREGISTRATION                 1
   REGISTRATION_AND_CAPABILITIES  2

@enum SIP-User-Data-Already-Available

   USER_DATA_NOT_AVAILABLE        0
   USER_DATA_ALREADY_AVAILABLE    1

;; ===========================================================================

@define Result-Code

   ;; Success

   FIRST_REGISTRATION                   2003
   SUBSEQUENT_REGISTRATION              2004
   UNREGISTERED_SERVICE                 2005
   SUCCESS_SERVER_NAME_NOT_STORED       2006
   SERVER_SELECTION                     2007
   SUCCESS_AUTH_SENT_SERVER_NOT_STORED  2008

   ;; Transient Failures

   USER_NAME_REQUIRED                   4013

   ;; Permanent Failures

   USER_UNKNOWN                         5032
   IDENTITIES_DONT_MATCH                5033
   IDENTITY_NOT_REGISTERED              5034
   ROAMING_NOT_ALLOWED                  5035
   IDENTITY_ALREADY_REGISTERED          5036
   AUTH_SCHEME_NOT_SUPPORTED            5037
   IN_ASSIGNMENT_TYPE                   5038
   TOO_MUCH_DATA                        5039
   NOT_SUPPORTED_USER_DATA              5040