Commit c4c7d9cd authored by garciay's avatar garciay
Browse files

STF500: Week #50

parent b8e235a6
Loading
Loading
Loading
Loading
+484 −800

File changed.

Preview size limit exceeded, changes collapsed.

+3 −1
Original line number Diff line number Diff line
@@ -163,7 +163,9 @@ module DiameterCxDx_Dx_TCFunctions {
                                    vc_userName,
                                    vc_publicIdentity,
                                    m_sIPNumberAuthItems(1),
                                    DiameterCxDx_Templates.m_sIPAuthDataItem_dummy, //TODO: Set real data here
                                    m_sIPAuthDataItem_authScheme(// containing a SIP-Auth-Data-Item AVP
                                        m_sIPAuthenticationScheme("DIGEST")   //         indicating “Digest-AKAv1-MD5”
                                    ),
                                    vc_serverName
                                )
                ));
+5 −5
Original line number Diff line number Diff line
@@ -237,7 +237,7 @@ module DiameterCxDx_PIXITS
         *          form, as described in 3GPP TS 23.003 [13].
         * @see 3GPP TS 29.229 6.3.2 Public-Identity AVP
         */
        modulepar charstring PX_PublicIdentity := "public_identity@etsi.org";
        modulepar UTF8String PX_PublicIdentity := "public_identity@etsi.org";
        
        /** @desc   UTF8String, 
         *          the Public-Identity value shall be different to PX_PublicIdentity.
@@ -314,10 +314,10 @@ module DiameterCxDx_PIXITS
         */
        modulepar DiameterURI PX_DiameterUri := {
            scheme          := "aaa",
            diameterId_FQDN := "FQDN",
            portField       := 6666,
            transport       := "tcp",
            protocol        := "diameter"
            diameterId_FQDN := "host.etsi.org",
            portField       := omit,
            transport       := omit,
            protocol        := omit
        };
        
        /** @desc   Integer SIP-Item-Number AVP 
+47 −43
Original line number Diff line number Diff line
@@ -104,6 +104,7 @@
            vc_SUT_port    := PX_DIAMETER_CX_SUT_HSS_PORT;

            vc_sessionId := m_sessionId(PX_SessionID);
            vc_sessionId2 := m_sessionId(PX_SessionID&"1");

            vc_originHost := m_originHost(PX_OriginHost);
            vc_originRealm := m_originRealm(PX_OriginRealm); // realm of the originator (TS)
@@ -415,7 +416,7 @@
            f_cscfInitialRegistrationCx();
            f_w_MAR_MAA(DIAMETER_SUCCESS_E);
            f_cscfSecondRegistratonCx();
            f_w_SAR_SAA(DIAMETER_SUCCESS_E);
            f_w_SAR_SAA(DIAMETER_SUCCESS_E,-,m_serverAssignmentType(REGISTRATION_E));
        } // End of function f_cscfRegistrationCx 
        
        /**
@@ -447,7 +448,7 @@
            f_w_UAR_UAA(
                        -, 
                        omit, 
                        DIAMETER_FIRST_REGISTRATION_E
                        DIAMETER_SUBSEQUENT_REGISTRATION_E
            );
            
        } // End of function f_cscfSecondRegistratonCx 
@@ -459,13 +460,13 @@
         * @see ETSI TS 129 228 V12.7.0 (2015-10) Clause A.4.1 Registration– user not registered
         */
        function f_cscfDeregistrationCx() runs on DiameterCx {
            f_w_UAR_UAA(mw_UAR_Body_dummy, DIAMETER_SUCCESS_E);
            f_w_SAR_SAA(DIAMETER_SUCCESS_E);
            f_w_UAR_UAA(mw_UAR, DIAMETER_SUCCESS_E);
            f_w_SAR_SAA(DIAMETER_SUCCESS_E,-,m_serverAssignmentType(USER_DEREGISTRATION_E));
        } // End of function f_cscfRegistrationCx 
        
        function f_s_MAR_MAA () runs on DiameterCx {
        function f_s_MAR_MAA (in Session_Id_AVP p_sessionId) runs on DiameterCx {
            f_send_MAR(m_MAR_Msg( 
                            vc_sessionId, 
                            p_sessionId, 
                            m_MAR_withServerName(
                                vc_originHost,
                                vc_originRealm,
@@ -477,14 +478,14 @@
                                vc_serverName
                            )
            ));
            f_awaiting_MAA(mw_MAA_Msg(vc_sessionId, mw_MAA_basic))
            f_awaiting_MAA(mw_MAA_Msg(p_sessionId, mw_MAA_basic))
        }
        
        function f_s_SAR_SAA (
        function f_s_SAR_SAA (in Session_Id_AVP p_sessionId,
                              in Srv_Assgmt_Type_Code p_serverAssignmentType := UNREGISTERED_USER_E
        ) runs on DiameterCx {
            f_send_SAR(m_SAR_Msg( 
                            vc_sessionId, 
                            p_sessionId, 
                            m_SAR_withUserNameAndPID(
                                vc_originHost,
                                vc_originRealm,
@@ -496,7 +497,7 @@
                                valueof(vc_publicIdentity)
                            )
            ));
            f_awaiting_SAA(mw_SAA_Msg(vc_sessionId, mw_SAA_basic))
            f_awaiting_SAA(mw_SAA_Msg(p_sessionId, mw_SAA_basic))
        }
        
        /**
@@ -505,11 +506,11 @@
         * 
         * @see ETSI TS 129 228 V12.7.0 (2015-10) Clause A.4.3 Registration– user not registered
         */
        function f_s_UAR_UAA_deRegistration() runs on DiameterCx {
        function f_s_UAR_UAA_deRegistration(in Session_Id_AVP p_sessionId) runs on DiameterCx {
            
            f_send_UAR(
                m_UAR_Msg(
                    vc_sessionId, 
                    p_sessionId, 
                    m_UAR_UauthDhostFlags(
                        vc_originHost, 
                        vc_originRealm, 
@@ -524,7 +525,7 @@
            
            f_awaiting_UAA(
                mw_UAA_Msg(
                    vc_sessionId, 
                    p_sessionId, 
                    mw_UAA_ResulExpreSernaSerca(
                        mw_resultCode(
                            DIAMETER_SUCCESS_E
@@ -538,13 +539,14 @@
        
        /**
         * @desc Initiate an SAR/SAA de-registration
         * @param p_sessionId
         * @verdict pass on success, fail otherwise
         * 
         * @see ETSI TS 129 228 V12.7.0 (2015-10) Clause A.4.3 Registration– user not registered
         */
        function f_s_SAR_SAA_deRegistration() runs on DiameterCx {
        function f_s_SAR_SAA_deRegistration(in Session_Id_AVP p_sessionId) runs on DiameterCx {
            
            f_s_SAR_SAA(USER_DEREGISTRATION_E);                                         // SAR de-registration
            f_s_SAR_SAA(p_sessionId, USER_DEREGISTRATION_E);                                         // SAR de-registration
            
        } // End of function f_s_SAR_SAA_deRegistration 
        
@@ -556,19 +558,20 @@
         * @param p_userName
         * @param p_publicIdentity
         * @param p_uar_Flags_Cx
         * @param p_sessionId
         * @verdict pass on success, fail otherwise
         * 
         * @see ETSI TS 129 228 V12.7.0 (2015-10) Clause A.4.1 Registration– user not registered
         */
        function f_hssRegistrationCx( 
                                     in charstring p_userName := PX_UserName,
                                     in charstring p_publicIdentity := PX_PublicIdentity,
        function f_hssRegistrationCx(in Session_Id_AVP p_sessionId, 
                                     in UTF8String p_userName := PX_UserName,
                                     in UTF8String p_publicIdentity := PX_PublicIdentity,
                                     in template (omit) UAR_Flags_AVP p_uar_Flags_Cx := omit
        ) runs on DiameterCx {
            f_hssInitialRegistrationCx(p_userName, p_publicIdentity, p_uar_Flags_Cx);   // With DIAMETER_FIRST_REGISTRATION
            f_s_MAR_MAA();
            f_hssSecondRegistratonCx(p_uar_Flags_Cx);                                   // With SUBEQUENT_REGISTRATION
            f_s_SAR_SAA(UNREGISTERED_USER_E);                                        // SAR registration
            f_hssInitialRegistrationCx(p_sessionId, p_userName, p_publicIdentity, p_uar_Flags_Cx);   // With DIAMETER_FIRST_REGISTRATION
            f_s_MAR_MAA(p_sessionId);
            f_hssSecondRegistratonCx(p_sessionId, p_uar_Flags_Cx);                                   // With SUBEQUENT_REGISTRATION
            f_s_SAR_SAA(p_sessionId, REGISTRATION_E);                                        // SAR registration
        } // End of function f_hssRegistrationCx 
        
        /**
@@ -576,13 +579,14 @@
         * @param p_userName
         * @param p_publicIdentity
         * @param p_uar_Flags_Cx
         * @param p_sessionId
         * @verdict pass on success, fail otherwise
         * 
         * @see ETSI TS 129 228 V12.7.0 (2015-10) Clause A.4.1 Registration– user not registered
         */
        function f_hssInitialRegistrationCx(
                                         in charstring p_userName := PX_UserName,
                                         in charstring p_publicIdentity := PX_PublicIdentity,
        function f_hssInitialRegistrationCx(in Session_Id_AVP p_sessionId, 
                                            in UTF8String p_userName := PX_UserName,
                                            in UTF8String p_publicIdentity := PX_PublicIdentity,
                                            in template (omit) UAR_Flags_AVP p_uar_Flags_Cx := omit
        ) runs on DiameterCx {
            vc_userName := m_userName(p_userName);
@@ -591,11 +595,11 @@
            } else {
                vc_publicIdentity := m_publicIdentity(p_publicIdentity);
            }
            vc_visitedNetworkId := m_visitedNetworkId(PX_VisitedNetworkId);
            //vc_visitedNetworkId := m_visitedNetworkId(PX_VisitedNetworkId);
            
            f_send_UAR(
                m_UAR_Msg(
                vc_sessionId, 
                p_sessionId, 
                m_UAR_UauthDhostFlags(
                    vc_originHost, 
                    vc_originRealm, 
@@ -610,7 +614,7 @@
            
            f_awaiting_UAA(
                mw_UAA_Msg(
                    vc_sessionId, 
                    p_sessionId, 
                    mw_UAA_ResulExpre(
                        omit, 
                        mw_experimentalResult(
@@ -624,15 +628,16 @@
        /**
         * @desc Initiate the second registration with SUBEQUENT_REGISTRATION experimental result
         * @param p_uar_Flags_Cx 
         * @param p_sessionId
         * @verdict pass on success, fail otherwise
         */
        function f_hssSecondRegistratonCx(
        function f_hssSecondRegistratonCx(in Session_Id_AVP p_sessionId,
                                          in template (omit) UAR_Flags_AVP p_uar_Flags_Cx := omit
        ) runs on DiameterCx {
            
            f_send_UAR(
                m_UAR_Msg(
                vc_sessionId, 
                p_sessionId, 
                m_UAR_UauthDhostFlags(
                    vc_originHost, 
                    vc_originRealm, 
@@ -647,7 +652,7 @@
            
            f_awaiting_UAA(
                mw_UAA_Msg(
                    vc_sessionId, 
                    p_sessionId, 
                    mw_UAA_ResulExpre(
                        omit, 
                        mw_experimentalResult(
@@ -660,15 +665,16 @@
        
        /**
         * @desc Initiate a full HSS de-registration
         * @param p_sessionId
         * @verdict pass on success, fail otherwise
         * 
         * @see ETSI TS 129 228 V12.7.0 (2015-10) Clause A.4.3 Registration– user not registered
         */
        function f_hssDeregistrationCx() runs on DiameterCx {
        function f_hssDeregistrationCx(in Session_Id_AVP p_sessionId) runs on DiameterCx {
            
            f_s_UAR_UAA_deRegistration();
            f_s_UAR_UAA_deRegistration(p_sessionId);
            
            f_s_SAR_SAA_deRegistration();
            f_s_SAR_SAA_deRegistration(p_sessionId);
            
        } // End of function f_hssRegistrationCx
        
@@ -691,6 +697,7 @@
                                 v_resultCodeAvp, v_expResultAvp);
            
            f_awaiting_UAR(mw_UAR_Msg(?, p_uAR));
            vc_userName:= vc_recvDiamMsg.uAR_MSG.uAR_Body.user_Name;
            f_send_UAA(m_UAA_Msg(vc_sessionId, v_UAA));
        }

@@ -715,11 +722,11 @@
        }
        
        function f_w_SAR_SAA (in template (omit) Result_Code_Type             p_resultCode,
                              in template (omit) Experimental_Result_Type p_expResultCode := omit )
                              in template (omit) Experimental_Result_Type     p_expResultCode := omit,
                              in template Server_Assignment_Type_AVP          p_server_Assignment_Type:=? )
        runs on DiameterCx {
            var template (omit)  Result_Code_AVP         v_resultCodeAvp := omit;
            var template (omit)  Experimental_Result_AVP v_expResultAvp  := omit;
            var template (value) MAA_Body_AVP            v_MAA;
            
            if(ispresent(p_resultCode)){
                v_resultCodeAvp := m_resultCode(valueof(p_resultCode));
@@ -727,10 +734,7 @@
                v_expResultAvp := m_experimentalResult(valueof(p_expResultCode));
            }
            
            v_MAA := m_MAA_basic(vc_originHost, vc_originRealm,
                                 v_resultCodeAvp, v_expResultAvp);
            
            f_awaiting_SAR(mw_SAR_Msg(?, mw_SAR)); // TODO To be refined a little beat
            f_awaiting_SAR(mw_SAR_Msg(?, mw_SAR(-,-,-,omit,-,-,-,p_server_Assignment_Type))); 
            f_send_SAA(m_SAA_Msg(vc_sessionId, m_SAA_basic(vc_originHost, vc_originRealm, m_resultCode(DIAMETER_SUCCESS_E))));
        }
        
+122 −31
Original line number Diff line number Diff line
@@ -7,13 +7,18 @@
 *            may be overwritten by future releases of this library
 *            End users are encouraged to contact the distributers of this
 *            module regarding their modifications or additions
 *            Note that usage of encvalue command (codec function) returns bitstring 
 *            length of the message or AVP with padding bytes. Therefore this function 
 *            is not used on the first level where length of one single AVP can be 
 *            calculated with lengthof function. It shall be used only on message level 
 *            or in case where one AVP is group of other AVPs.
 *  @remark   Any additions to the templates shall follow the design rules
 *            and always modify base templates only;
 */

module DiameterCxDx_Templates {

    import from LibDiameter_Interface {}
    import from LibDiameter_Interface all; 

    import from LibCommon_BasicTypesAndValues {type UInt32, UInt24;}

@@ -127,14 +132,14 @@ module DiameterCxDx_Templates {

                template (value) Redirect_Host_AVP m_redirectHost(template (value) Diameter_Identity p_avpData) := 
                {
                    aVP_Header := m_aVP_HeaderVid_Mbit1(c_redirect_Host_AVP_Code, lengthof(p_avpData), omit),
                    aVP_Header := m_aVP_HeaderVid_Mbit1(c_redirect_Host_AVP_Code, f_getCharStringLength(p_avpData), omit),
                    aVP_Data := p_avpData
                }
                
                template Deregistration_Reason_AVP m_deregistrationReason(in template (value) Reason_Code_AVP p_reasonCode
                ) := {
                    aVP_Header := m_aVP_HeaderVid_Mbit1(c_reason_Code_AVP_Code,
                                                        f_lengthof_AVP(p_reasonCode.aVP_Header),
                    aVP_Header := m_aVP_HeaderVid_Mbit1(c_deregistration_Reason_AVP_Code,
                                                        valueof(p_reasonCode.aVP_Header.aVP_len),
                                                        c_vendId3gpp),
                    reason_Code := p_reasonCode,
                    reason_Info := omit,
@@ -149,7 +154,9 @@ module DiameterCxDx_Templates {
                
                template (value) Charging_Information_AVP m_chargingInformation(in template (omit) Primary_Event_Charging_Function_Name_AVP p_primary_Event_Charging_Function_Name
                ) := {
                    aVP_Header                                 := m_aVP_HeaderVid_Mbit1(c_charging_Information_AVP_Code, 4, c_vendId3gpp), //<AVP header: 618 ....>
                    aVP_Header                                 := m_aVP_HeaderVid_Mbit1(c_charging_Information_AVP_Code, 
                                                                                        f_getEncvalueLength(encvalue(p_primary_Event_Charging_Function_Name)),//p_primary_Event_Charging_Function_Name.aVP_Header.aVP_len,
                                                                                        c_vendId3gpp), //<AVP header: 618 ....>
                    primary_Event_Charging_Function_Name       := p_primary_Event_Charging_Function_Name,
                    secondary_Event_Charging_Function_Name     := omit,
                    primary_Charging_Collection_Function_Name  := omit,
@@ -157,12 +164,23 @@ module DiameterCxDx_Templates {
                    aVP_Type                                   := omit
                }
                
                template (value) Primary_Event_Charging_Function_Name_AVP m_primary_event_charging_function_name(in template (value) DiameterURI p_aVP_Data
                template (value) Primary_Event_Charging_Function_Name_AVP m_primary_event_charging_function_name(in template (value) UTF8String p_aVP_Data
                ) := {
                    aVP_Header := m_aVP_HeaderVid_Mbit1(c_primary_Event_Charging_Function_Name_AVP_Code, 4, c_vendId3gpp), //<AVP header: 619 ....>
                    aVP_Header := m_aVP_HeaderVid_Mbit1(c_primary_Event_Charging_Function_Name_AVP_Code,
                                                        f_getUTF8StringLength(p_aVP_Data), 
                                                        c_vendId3gpp), //<AVP header: 619 ....>
                    aVP_Data   := p_aVP_Data
                }
                
                template (value) DiameterURI m_diameterURI := 
                {
                    scheme := "aaa",
                    diameterId_FQDN := "host.etsi.org",
                    portField := omit,
                    transport:= omit,
                    protocol:= omit
                }
                
                template (value) SIP_Authentication_Context_AVP  m_sIP_Authentication_Context_digest(
                                                                                                     in template (value) octetstring p_aVP_Data
                ) := {
@@ -200,10 +218,10 @@ module DiameterCxDx_Templates {
                    aVP_Data := p_aVP_Data
                }
                
                template (value) User_Data_AVP m_userData(template (value) octetstring p_aVpData) := {
                template (value) User_Data_AVP m_userData(in octetstring p_aVpData) := {

                aVP_Header := m_aVP_HeaderVid_Mbit1(c_user_Data_AVP_Code,
                                                    4+f_getOctetStringLength(p_aVpData),
                                                    f_getOctetStringLength(p_aVpData),
                                                    c_vendId3gpp),
                aVP_Data := p_aVpData
                }
@@ -243,30 +261,76 @@ module DiameterCxDx_Templates {
                    }
                }
                
                template SIP_Auth_Data_Item_AVP m_sIPAuthDataItem (template (value) SIP_Authentication_Scheme_AVP   p_sIP_Authentication_Scheme,
                                                                                               template (omit) SIP_Item_Number_AVP              p_sIP_Item_Number := omit,
                                                                                               template (omit) SIP_Authenticate_AVP             p_sIP_Authenticate := omit,
                                                                                               template (omit) SIP_Authorization_AVP            p_sIP_Authorization := omit,
                                                                                               template (omit) SIP_Authentication_Context_AVP   p_sIP_Authentication_Context := omit,
                                                                                               template (omit) Confidentiality_Key_AVP          p_confidentiality_Key := omit,
                                                                                               template (omit) Integrity_Key_AVP                p_integrity_Key := omit,
                                                                                               template (omit) SIP_Digest_Authenticate_AVP      p_sIP_Digest_Authenticate := omit,
                                                                                               template (omit) Line_Identifier_AVP              p_line_Identifier := omit
                template SIP_Auth_Data_Item_AVP m_sIPAuthDataItem_authScheme_sipAuthorization (template (value) SIP_Authentication_Scheme_AVP   p_sIP_Authentication_Scheme,
                                                                                               template (value) SIP_Authorization_AVP           p_sIP_Authorization
                ) modifies m_sIPAuthDataItem_dummy := {
                    sIP_Auth_Data_Item_3GPP_AVP :={
                        aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Auth_Data_Item_AVP_Code, 1/*correct length calculation needed*/, c_vendId3gpp),
                        aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Auth_Data_Item_AVP_Code,
                                                            f_addPaddedBytes2Length(p_sIP_Authentication_Scheme.sIP_Authentication_Scheme_3GPP_AVP.aVP_Header.aVP_len) +
                                                            f_addPaddedBytes2Length(p_sIP_Authorization.sIP_Authorization_3GPP_AVP.aVP_Header.aVP_len), 
                                                            c_vendId3gpp),
                        sIP_Authentication_Scheme   := p_sIP_Authentication_Scheme,
                        sIP_Item_Number             := p_sIP_Item_Number,
                        sIP_Authenticate            := p_sIP_Authenticate,
                        sIP_Authorization           := p_sIP_Authorization,
                        sIP_Authentication_Context  := p_sIP_Authentication_Context,
                        confidentiality_Key         := p_confidentiality_Key,
                        integrity_Key               := p_integrity_Key,
                        sIP_Digest_Authenticate     := p_sIP_Digest_Authenticate,
                        line_Identifier             := p_line_Identifier
                        sIP_Authorization           := p_sIP_Authorization
                    }
                }
                
                template SIP_Auth_Data_Item_AVP m_sIPAuthDataItem_authScheme_sipAuthContext (template (value) SIP_Authentication_Scheme_AVP   p_sIP_Authentication_Scheme,
                                                                                             template (value) SIP_Authentication_Context_AVP   p_sIP_Authentication_Context
                ) modifies m_sIPAuthDataItem_dummy := {
                    sIP_Auth_Data_Item_3GPP_AVP :={
                        aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Auth_Data_Item_AVP_Code,
                                                            f_addPaddedBytes2Length(p_sIP_Authentication_Scheme.sIP_Authentication_Scheme_3GPP_AVP.aVP_Header.aVP_len) +
                                                            f_addPaddedBytes2Length(p_sIP_Authentication_Context.aVP_Header.aVP_len), 
                                                            c_vendId3gpp),
                        sIP_Authentication_Scheme   := p_sIP_Authentication_Scheme,
                        sIP_Authentication_Context  := p_sIP_Authentication_Context
                    }
                }
                
                template SIP_Auth_Data_Item_AVP m_sIPAuthDataItem_authScheme_itemNo_sipAuthContext (template (value) SIP_Authentication_Scheme_AVP   p_sIP_Authentication_Scheme,
                                                                                                    template (value) SIP_Item_Number_AVP              p_sIP_Item_Number,
                                                                                                    template (value) SIP_Authentication_Context_AVP   p_sIP_Authentication_Context
                ) modifies m_sIPAuthDataItem_dummy := {
                    sIP_Auth_Data_Item_3GPP_AVP :={
                        aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Auth_Data_Item_AVP_Code,
                                                            f_addPaddedBytes2Length(p_sIP_Authentication_Scheme.sIP_Authentication_Scheme_3GPP_AVP.aVP_Header.aVP_len) +
                                                            p_sIP_Item_Number.aVP_Header.aVP_len + 
                                                            f_addPaddedBytes2Length(p_sIP_Authentication_Context.aVP_Header.aVP_len), 
                                                            c_vendId3gpp),
                        sIP_Authentication_Scheme   := p_sIP_Authentication_Scheme,
                        sIP_Item_Number             := p_sIP_Item_Number,
                        sIP_Authentication_Context  := p_sIP_Authentication_Context
                    }
                }
//                
//                template SIP_Auth_Data_Item_AVP m_sIPAuthDataItem (template (value) SIP_Authentication_Scheme_AVP   p_sIP_Authentication_Scheme,
//                                                                                               template (omit) SIP_Item_Number_AVP              p_sIP_Item_Number := omit,
//                                                                                               template (omit) SIP_Authenticate_AVP             p_sIP_Authenticate := omit,
//                                                                                               template (omit) SIP_Authorization_AVP            p_sIP_Authorization := omit,
//                                                                                               template (omit) SIP_Authentication_Context_AVP   p_sIP_Authentication_Context := omit,
//                                                                                               template (omit) Confidentiality_Key_AVP          p_confidentiality_Key := omit,
//                                                                                               template (omit) Integrity_Key_AVP                p_integrity_Key := omit,
//                                                                                               template (omit) SIP_Digest_Authenticate_AVP      p_sIP_Digest_Authenticate := omit,
//                                                                                               template (omit) Line_Identifier_AVP              p_line_Identifier := omit
//                ) modifies m_sIPAuthDataItem_dummy := {
//                    sIP_Auth_Data_Item_3GPP_AVP :={
//                        aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Auth_Data_Item_AVP_Code,
//                                                            f_addPaddedBytes2Length(p_sIP_Authentication_Scheme.sIP_Authentication_Scheme_3GPP_AVP.aVP_Header.aVP_len) +
//                                                            p_sIP_Item_Number.aVP_Header.aVP_len + 
//                                                            f_addPaddedBytes2Length(p_sIP_Authentication_Context.aVP_Header.aVP_len), 
//                                                            c_vendId3gpp),
//                        sIP_Authentication_Scheme   := p_sIP_Authentication_Scheme,
//                        sIP_Item_Number             := p_sIP_Item_Number,
//                        sIP_Authenticate            := p_sIP_Authenticate,
//                        sIP_Authorization           := p_sIP_Authorization,
//                        sIP_Authentication_Context  := p_sIP_Authentication_Context,
//                        confidentiality_Key         := p_confidentiality_Key,
//                        integrity_Key               := p_integrity_Key,
//                        sIP_Digest_Authenticate     := p_sIP_Digest_Authenticate,
//                        line_Identifier             := p_line_Identifier
//                    }
//                }
                
              }//end group sendingTemplatesForAVPs
              
              group awaitingTemplatesForAVPs{
@@ -451,6 +515,7 @@ module DiameterCxDx_Templates {
                                                                                               in template SIP_Authenticate_AVP                     p_sIP_Authenticate := *,
                                                                                               in template SIP_Authorization_AVP                    p_sIP_Authorization := *,
                                                                                               in template SIP_Authentication_Context_AVP           p_sIP_Authentication_Context := *,
                                                                                               in template SIP_Digest_Authenticate_AVP              p_sIP_Digest_Authenticate := *,
                                                                                               in template Integrity_Key_AVP                        p_integrity_Key := *,
                                                                                               in template Line_Identifier_AVP                      p_line_Identifier := *,
                                                                                               in template Framed_IP_Address_AVP                    p_framed_IP_Address := *
@@ -460,6 +525,7 @@ module DiameterCxDx_Templates {
                        sIP_Authenticate            := p_sIP_Authenticate,
                        sIP_Authorization           := p_sIP_Authorization,
                        sIP_Authentication_Context  := p_sIP_Authentication_Context,
                        sIP_Digest_Authenticate     := p_sIP_Digest_Authenticate,
                        integrity_Key               := p_integrity_Key,
                        line_Identifier             := p_line_Identifier,
                        framed_IP_Address           := p_framed_IP_Address
@@ -468,13 +534,13 @@ module DiameterCxDx_Templates {
            
                template (present) SIP_Authentication_Scheme_AVP mw_sIPAuthenticationScheme(template (present) UTF8String p_aVP_Data) := {
                    sIP_Authentication_Scheme_3GPP_AVP := {
                        aVP_Header := mw_aVP_HeaderVid_Mbit1(c_sIP_Authentication_Scheme_AVP_Code, 4, c_vendId3gpp),
                        aVP_Header := mw_aVP_Header_VMbit1(c_sIP_Authentication_Scheme_AVP_Code),
                        aVP_Data := p_aVP_Data
                    }
                }
                
                template Line_Identifier_AVP mw_line_Identifier_dummy := {
                    aVP_Header := mw_aVP_HeaderVid_Mbit1(c_line_Identifier_AVP_Code, ?, c_vendId3gpp),
                    aVP_Header := mw_aVP_HeaderVid_Mbit1(c_line_Identifier_AVP_Code, ?, c_vendIdETSI),
                    aVP_Data := ?
                }
                
@@ -496,6 +562,28 @@ module DiameterCxDx_Templates {
                        aVP_Data    := ?
                    }
                }
                
                template SIP_Digest_Authenticate_AVP mw_IP_Digest_Authenticate_Relm_Qop_HA1 := {
                        aVP_Header  := mw_aVP_Header_Vbit1Mbit0(c_sIP_Digest_Authenticate_AVP_Code),
                        digest_Realm       := ?,
                        digest_Algorithm   := *,
                        digest_QoP         := ?,
                        digest_HA1         := ?,
                        aVP_Type           := *
                }
            
                template SIP_Number_Auth_Items_AVP mw_sIPNumberAuthItems (template (present) UInt32 p_avpData := ?) := {
                    aVP_Header := mw_aVP_Header_VMbit1(c_sIP_Number_Auth_Items_AVP_Code),
                    aVP_Data := p_avpData
                }
            
                template Identity_with_Emergency_Registration_AVP mw_IdentityWithEmergencyReg := {
                    aVP_Header         := mw_aVP_Header_VMbit1(c_identity_with_Emergency_Registration_AVP_Code),
                    user_Name          := ?,
                    public_Identity    := ?,
                    aVP_Type           := *
                }
                
            }//end group awaitingTemplatesForAVPs
            
        } //end group SpecificAVPHeaders
@@ -832,7 +920,8 @@ module DiameterCxDx_Templates {
            template (value) LIR_Body_AVP m_LIR_basic (template (value) Origin_Host_AVP        p_originHost,
                                                       template (value) Origin_Realm_AVP       p_originRealm,
                                                       template (value) Destination_Realm_AVP  p_destinationRealm,
                                                       template (omit) Public_Identity_AVP    p_public_Identity)
                                                       template (omit) Public_Identity_AVP    p_public_Identity,
                                                       template (omit) Destination_Host_AVP  p_destinationHost := omit)
            modifies m_LIR_Body_dummy := {
                vendor_Specific_Application_Id := m_vendor_Specific_Appl_Id_Cx, //mandatory in TS 129 229
                auth_Application_Id := omit,                                    //not in TS 129 229
@@ -841,7 +930,7 @@ module DiameterCxDx_Templates {
                origin_Realm := p_originRealm,
                destination_Realm := p_destinationRealm,
                sIP_AOR := omit,                       //not in  TS129 229
                destination_Host := omit,
                destination_Host := p_destinationHost,
                originating_Request := omit,           //only TS129 229
                supported_Features := omit,            //only TS129 229
                public_Identity := p_public_Identity,  //required in TS129 229
@@ -856,6 +945,7 @@ module DiameterCxDx_Templates {
                                                                       template (value) Origin_Realm_AVP       p_originRealm,
                                                                       template (value) Destination_Realm_AVP  p_destinationRealm,
                                                                       template (omit) Public_Identity_AVP    p_public_Identity,
                                                                       template (omit) Destination_Host_AVP  p_destinationHost := omit,
                                                                       template (omit) User_Authorization_Type_AVP p_user_Authorization_Type)
            modifies m_LIR_basic := {
                user_Authorization_Type := p_user_Authorization_Type       //only TS129 229
@@ -865,6 +955,7 @@ module DiameterCxDx_Templates {
                                                                    template (value) Origin_Realm_AVP       p_originRealm,
                                                                    template (value) Destination_Realm_AVP  p_destinationRealm,
                                                                    template (omit) Public_Identity_AVP    p_public_Identity,
                                                                    template (omit) Destination_Host_AVP  p_destinationHost := omit,
                                                                    template (omit) Originating_Request_AVP p_originating_Request_AVP)
            modifies m_LIR_basic := {
                originating_Request := p_originating_Request_AVP       //only TS129 229
@@ -1478,7 +1569,7 @@ module DiameterCxDx_Templates {
                            template (present) Origin_Host_AVP           p_originHost:=?,
                            template (present) Origin_Realm_AVP          p_originRealm:=?,
                            template (present) Destination_Realm_AVP     p_destinationRealm:=?,
                            template User_Name_AVP                       p_userName:=?,
                            template User_Name_AVP                       p_userName:=*,
                            template (present) Auth_Session_State_AVP    p_auth_Session_State:=?,
                            template SAR_Body_AVP.public_Identity        p_public_Identity:=*,
                            template Server_Name_AVP                     p_server_Name:=?,
Loading