LibSip_Templates.ttcn 190 KB
Newer Older
/**
garciay's avatar
garciay committed
 * @author STF 346, STF366, STF368, STF369, STF450, STF471
 * @version $Id$
 * @desc
 *     This module defines SIP Templates for message, header, and
 *     structured types. <br>
 *     Note that any changes made to the definitions in this module
 *     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.
 * @remark
 *     Any additions to the templates shall follow the design rules and always modify base templates only; Existing templates shall not be changed or removed -
 *     change requests shall be made to http://t-ort.etsi.org
garciay's avatar
garciay committed
module LibSip_Templates {
    //     LibSip
    import from LibSip_SIPTypesAndValues all;
    import from LibSip_SDPTypes all;
    import from LibSip_Interface all;
    import from LibSip_PIXITS all;
    import from LibSip_XMLTypes all;
    import from LibSip_SimpleMsgSummaryTypes all;
garciay's avatar
garciay committed
    import from LibSip_MessageBodyTypes all;

schmitting's avatar
schmitting committed
    import from NoTargetNamespace language "XSD" all
    with {
garciay's avatar
garciay committed
        extension "File:../xsd/Ims3gpp.xsd";
schmitting's avatar
schmitting committed
    }
schmitting's avatar
schmitting committed
    import from urn_ietf_params_xml_ns_conference_info language "XSD" all
    with {
garciay's avatar
garciay committed
        extension "File:../xsd/CONF.xsd";
schmitting's avatar
schmitting committed
    }
schmitting's avatar
schmitting committed
    import from http_uri_etsi_org_ngn_params_xml_simservs_pstn language "XSD" all
    with {
garciay's avatar
garciay committed
        extension "File:../xsd/PSTN.xsd";
schmitting's avatar
schmitting committed
    }
schmitting's avatar
schmitting committed
    import from http_uri_etsi_org_ngn_params_xml_simservs_xcap language "XSD" all
    with {
garciay's avatar
garciay committed
        extension "File:../xsd/SupplementaryServices.xsd";
schmitting's avatar
schmitting committed
    }
schmitting's avatar
schmitting committed
    import from http_uri_etsi_org_ngn_params_xml_simservs_mcid language "XSD" all
    with {
garciay's avatar
garciay committed
        extension "File:../xsd/MCID.xsd";
schmitting's avatar
schmitting committed
    }
schmitting's avatar
schmitting committed
    import from urn_ietf_params_xml_ns_resource_lists language "XSD" all
    with {
garciay's avatar
garciay committed
        extension "File:../xsd/ResourceList.xsd";
schmitting's avatar
schmitting committed
    }
    import from http_uri_etsi_org_ngn_params_xml_comm_div_info language "XSD" all
    with {
garciay's avatar
garciay committed
        extension "File:../xsd/CDIVN.xsd";
    }

    import from urn_3gpp_ns_cw_1_0 language "XSD" all
garciay's avatar
garciay committed
    with {
        extension "File:../xsd/cw.xsd";
garciay's avatar
garciay committed
    group ModuleParameters {
garciay's avatar
garciay committed
        modulepar boolean MB_LENGTH_FROM_ENCVAL := true;
        //*     to get length of message body from ecoded value
        modulepar boolean USE_FX_FOR_XML_LENGTH := false;




    //*     To use external functions for calculation of XML message/body length
    } //*     group ModuleParameters

    group SubFields {

garciay's avatar
garciay committed
        template(value) Addr_Union m_AddrUnion_NameAddr(template(value) NameAddr p_nameAddr) := {
garciay's avatar
garciay committed
            nameAddr := p_nameAddr
        }

        template(value) Addr_Union m_AddrUnion_DisplayAndSipUrl(
                                                                template(value) charstring p_displayName, 
                                                                template(value) SipUrl p_addrSpec) := {
            nameAddr := m_CallingAddr(p_displayName, p_addrSpec)
        }

        template(value) NameAddr m_NameAddr(
                                            template(omit) charstring p_displayName, 
                                            template(value) SipUrl p_addrSpec) := {
            displayName := p_displayName, addrSpec := p_addrSpec
        }

        template(value) NameAddr m_CallingAddr(
                                               template(value) charstring p_displayName, 
                                               template(value) SipUrl p_addrSpec) := m_NameAddr(p_displayName, p_addrSpec);

        template(present) NameAddr mw_NameAddr(
                                               template charstring p_displayName, 
                                               template(present) SipUrl p_addrSpec) := {
            displayName := p_displayName, addrSpec := p_addrSpec
        }

        template(present) CommaParam_List mw_digestResponse(template(present) GenericParam p_genericParam) := superset(p_genericParam); //*     c_Integrity_protected_yes
garciay's avatar
garciay committed
        template(value) SemicolonParam_List m_cpc := {
            {
                "cpc", 
                PX_SIP_ISUP_CPC_VALUE
             }
        }
garciay's avatar
garciay committed
        template(value) SemicolonParam_List m_ReasonParams(
                                                           template(omit) charstring p_cause, 
                                                           template(value) charstring p_text) := {
            m_Cause(p_cause), m_Text(p_text)
        }

        template(present) SemicolonParam_List mw_ReasonParams(
                                                              template charstring p_cause, 
                                                              template charstring p_text) := {
            mw_Cause_base(p_cause), mw_Text(p_text)
        }

        template(value) ReasonValue m_ReasonValue_Base := {
            token := "", 
            reasonParams := omit
        }
garciay's avatar
garciay committed
        template(present) ReasonValue mw_ReasonValue_Base := {
            token := ?, 
            reasonParams := *
        }
garciay's avatar
garciay committed
        template(value) ReasonValue m_ReasonValue_param(
                                                        template(value) charstring p_cause, 
                                                        template(value) charstring p_text
        ) modifies m_ReasonValue_Base := {
            reasonParams := m_ReasonParams(p_cause, p_text)
garciay's avatar
garciay committed
        template(present) ReasonValue mw_ReasonValue_param(
                                                           template charstring p_cause, 
                                                           template charstring p_text 
        ) modifies mw_ReasonValue_Base := {
            reasonParams := mw_ReasonParams(p_cause, p_text)
garciay's avatar
garciay committed
        template(value) ReasonValue m_ReasonValue(
                                                  template(value) charstring p_cause, 
                                                  template(value) charstring p_text 
        ) modifies m_ReasonValue_param := {
            token := "Q.850"
garciay's avatar
garciay committed
        template(present) ReasonValue mw_ReasonValue(
                                                     template charstring p_cause, 
                                                     template charstring p_text 
        ) modifies mw_ReasonValue_param := {
            token := "Q.850"
        }
        
        template(value) ReasonValue m_ReasonValueSIP(
                                                     template(value) charstring p_cause, 
                                                     template(value) charstring p_text
        ) modifies m_ReasonValue_param := {
            token := "SIP"
        }
        
        template(present) ReasonValue mw_ReasonValueSIP(
                                                        template charstring p_cause, 
                                                        template charstring p_text
        ) modifies mw_ReasonValue_param := {
            token := "SIP"
        }

        template(present) RouteBody mw_routeBody(template(present) SipUrl p_sipurl) := {
            nameAddr := mw_NameAddr(*, p_sipurl), 
            rrParam := *
        }

        template(value) SentProtocol m_SentProtocol(template(value) charstring p_protocol) := {
            protocolName := c_sipName, 
            protocolVersion := c_sipVersion, 
            transport := p_protocol
        }

garciay's avatar
garciay committed
        template(present) SipUrl m_BasicSipUrl := {
            scheme := (c_sipScheme), 
garciay's avatar
garciay committed
            components := {
                sip := {
                    userInfo := {
garciay's avatar
garciay committed
                        userOrTelephoneSubscriber := "", //*     charstring
                        password := omit //*     optional charstring
garciay's avatar
garciay committed
                    hostPort := {
garciay's avatar
garciay committed
                        host := omit, //*     hostname, IPv4 or IPv6 as a charstring
                        portField := omit //*     p_userprofile.currPort - optional integer
garciay's avatar
garciay committed
                    }
garciay's avatar
garciay committed
            urlParameters := omit, 
garciay's avatar
garciay committed
            headers := omit
garciay's avatar
garciay committed

        template(value) SipUrl m_SipUrl_currDomain_Base(template(value) SipUserProfile p_userprofile) modifies m_BasicSipUrl := {
            components := {
                sip := {
                    userInfo := {
                        userOrTelephoneSubscriber := p_userprofile.publUsername
                    }
                }
            }
        }
garciay's avatar
garciay committed
        template(value) SipUrl m_SipUrl_currDomain(template(value) SipUserProfile p_userprofile) modifies m_SipUrl_currDomain_Base := {
            components := {
                sip := {
                    hostPort := {
                        host :=
garciay's avatar
garciay committed
                            p_userprofile.homeDomain //*     hostname, IPv4 or IPv6 as a charstring
garciay's avatar
garciay committed
        template(value) SipUrl m_SipUrl_contactIpaddr(template(value) SipUserProfile p_userprofile) modifies m_SipUrl_currDomain_Base := {
            components := {
                sip := {
                    hostPort := {
garciay's avatar
garciay committed
                        host := p_userprofile.contactIpaddr,  //*     hostname, IPv4 or IPv6 as a charstring
                        portField := p_userprofile.contactPort //*     optional integer
garciay's avatar
garciay committed
        template(value) SipUrl m_SipUrl_contactIpaddrAndCpc(template(value) SipUserProfile p_userprofile) modifies m_SipUrl_contactIpaddr := {
            components := {
                sip := {
                    userInfo := {
                        userOrTelephoneSubscriber :=
garciay's avatar
garciay committed
                            p_userprofile.publUsername & "; cpc=" & PX_SIP_ISUP_CPC_VALUE //*     charstring
garciay's avatar
garciay committed
        template(value) SipUrl m_SipUrl_currIpaddr(template(value) SipUserProfile p_userprofile) modifies m_SipUrl_currDomain_Base := {
            components := {
                sip := {
                    hostPort := {
garciay's avatar
garciay committed
                        host := p_userprofile.currIpaddr,  //*     hostname, IPv4 or IPv6 as a charstring
                        portField := p_userprofile.currPort //*     optional integer
garciay's avatar
garciay committed
        template(value) SipUrl m_SipUrl_Anonymous modifies m_BasicSipUrl := {
garciay's avatar
garciay committed
            components := {
                sip := {
                    userInfo := {
garciay's avatar
garciay committed
                        userOrTelephoneSubscriber := "Anonymous"  //*     charstring
garciay's avatar
garciay committed
                    },
                    hostPort := {
garciay's avatar
garciay committed
                        host := "Anonymous.invalid"  //*     hostname, IPv4 or IPv6 as a charstring
                    }
                }
            }
        }

        // TODO: this temlate is possibly incorrectly defined, or "p_urlParameters" parameter name is incorrect, since it is assigned to "headers"
        template(value) SipUrl m_SipUrl_NumberHostHeader(
                                                         template(value) charstring p_number, 
                                                         template(value) charstring p_host,
                                                         template(omit) AmpersandParam_List p_urlParameters
        ) modifies m_BasicSipUrl := {
            components := {
                sip := {
                    userInfo := {
                        userOrTelephoneSubscriber := p_number
                    }, 
                    hostPort := {
                        host := p_host
garciay's avatar
garciay committed
            urlParameters := p_urlParameters
        }

        template(value) SipUrl m_SipUrl_NumberHostParam(
                                                        template(value) charstring p_number, 
                                                        template(value) charstring p_host,
                                                        template(omit) AmpersandParam_List p_urlParameters
garciay's avatar
garciay committed
        ) modifies m_SipUrl_NumberHostHeader := {
            components := {
                sip := {
                    hostPort := {
                        portField := c_defaultSipPort
                    }
                }
            }
garciay's avatar
garciay committed
        template(value) SipUrl m_SipUrl_NumberHostParam_woPort(
                                                              template(value) charstring p_number, 
                                                              template(value) charstring p_host,
                                                              template(omit) AmpersandParam_List p_urlParameters
garciay's avatar
garciay committed
        ) modifies m_SipUrl_NumberHostParam := {
            components := {
                sip := {
                    hostPort := {
                        portField := omit
                    }
                }
            }
        }

        template(present) SipUrl m_BasicTelUrl := {
            scheme := (c_telScheme), 
garciay's avatar
garciay committed
            components := {
                tel := {
garciay's avatar
garciay committed
                    subscriber := ""
garciay's avatar
garciay committed
            urlParameters := omit, 
garciay's avatar
garciay committed
            headers := omit
        }

garciay's avatar
garciay committed
        template(value) SipUrl m_TelUrl_publUser(template(value) SipUserProfile p_userprofile) modifies m_BasicTelUrl := {
garciay's avatar
garciay committed
            components := {
garciay's avatar
garciay committed
                tel := {
                    subscriber :=
                        p_userprofile.publUsername //*     charstring
                }
            }
garciay's avatar
garciay committed
        template(present) SipUrl mw_TelUrl := {
            scheme := c_telScheme, 
garciay's avatar
garciay committed
            components := {
                tel := {
                    subscriber := ?
                }
garciay's avatar
garciay committed
            },
            urlParameters := *, 
            headers := *
garciay's avatar
garciay committed
        template(present) SipUrl mw_SipUrl := {
            scheme := c_sipScheme, 
garciay's avatar
garciay committed
            components := {
                sip := {
garciay's avatar
garciay committed
                    userInfo := {
                        userOrTelephoneSubscriber := ?, 
                        password := *
                    },
                    hostPort := {
                        host := *, 
                        portField := *
                    }
garciay's avatar
garciay committed
                }
garciay's avatar
garciay committed
            },
            urlParameters := *, 
            headers := *
garciay's avatar
garciay committed

        template(present) SipUrl mw_TelSip_unavailableInvalidUri := (mw_TelSip_unavailableInvalidUri1, mw_TelSip_unavailableInvalidUri2);

garciay's avatar
garciay committed
        template(present) SipUrl mw_TelSip_unavailableInvalidUri1 modifies mw_SipUrl := {
garciay's avatar
garciay committed
            components := {
                sip := {
                    userInfo := {
                        userOrTelephoneSubscriber := "unavailable", 
garciay's avatar
garciay committed
                        password := omit // TODO STF471: shall be omit or *. If *, remove them die to modifies mw_BasicSipUrl
garciay's avatar
garciay committed
                    },
                    hostPort := {
                        host := "anonymous.invalid", 
                        portField := c_defaultSipPort
                    }
                }
            },
garciay's avatar
garciay committed
            urlParameters := omit, // TODO STF471: shall be *. If *, remove them die to modifies mw_BasicSipUrl
            headers := omit // TODO STF471: shall be *. If *, remove them die to modifies mw_BasicSipUrl
garciay's avatar
garciay committed
        }
garciay's avatar
garciay committed
        template(present) SipUrl mw_TelSip_unavailableInvalidUri2 modifies mw_TelUrl := {
garciay's avatar
garciay committed
            components := {
                tel := {
                    subscriber := "unavailable"
                }
            },
garciay's avatar
garciay committed
            urlParameters := omit, // TODO STF471: shall be *. If *, remove them die to modifies mw_BasicSipUrl
            headers := omit // TODO STF471: shall be *. If *, remove them die to modifies mw_BasicSipUrl
pintar's avatar
pintar committed

garciay's avatar
garciay committed
        template(present) SipUrl mw_TelSip_unavailableUri(template(value) charstring p_host) := (mw_TelSip_unavailableUri1(p_host), mw_TelSip_unavailableUri2(p_host));

garciay's avatar
garciay committed
        template(present) SipUrl mw_TelSip_unavailableUri1(template(value) charstring p_host) modifies mw_TelUrl := {
garciay's avatar
garciay committed
            components := {
                tel := {
                    subscriber := "unavailable"
                }
            },
garciay's avatar
garciay committed
            urlParameters := omit, // TODO STF471: shall be *. If *, remove them die to modifies mw_BasicSipUrl
            headers := omit // TODO STF471: shall be *. If *, remove them die to modifies mw_BasicSipUrl
garciay's avatar
garciay committed
        template(present) SipUrl mw_TelSip_unavailableUri2(template(value) charstring p_host) modifies mw_SipUrl := {
garciay's avatar
garciay committed
            components := {
                sip := {
                    userInfo := {
                        userOrTelephoneSubscriber := "unavailable", 
garciay's avatar
garciay committed
                        password := omit // TODO STF471: shall be *. If *, remove them die to modifies mw_BasicSipUrl
garciay's avatar
garciay committed
                    }, 
                    hostPort := {
                        host := p_host, 
                        portField := c_defaultSipPort
garciay's avatar
garciay committed
                    }
                }
garciay's avatar
garciay committed
            },
            urlParameters := omit, // TODO STF471: shall be *. If *, remove them die to modifies mw_BasicSipUrl
            headers := omit // TODO STF471: shall be *. If *, remove them die to modifies mw_BasicSipUrl
garciay's avatar
garciay committed
        template(present) SipUrl mw_SipUrl_Number(template(present) charstring p_number) modifies mw_SipUrl := {
garciay's avatar
garciay committed
            components := {
                sip := {
garciay's avatar
garciay committed
                    userInfo := {
                        userOrTelephoneSubscriber := p_number
                    }, 
garciay's avatar
garciay committed
                    hostPort := ?
                }
garciay's avatar
garciay committed
            }
garciay's avatar
garciay committed
        template(present) SipUrl mw_TelSipUrl_Number(template(present) charstring p_number) := (mw_SipUrl_Number(p_number), mw_TelSipUrl_Number2(p_number));
garciay's avatar
garciay committed
        template(present) SipUrl mw_TelSipUrl_Number1(template(present) charstring p_number) := mw_SipUrl_Number(p_number);
        
        template(present) SipUrl mw_TelSipUrl_Number2(template(present) charstring p_number) modifies mw_TelUrl := {
            components := {
                tel := {
                    subscriber := p_number
                }
            }
garciay's avatar
garciay committed
        template(present) SipUrl mw_SipUrl_Host(template charstring p_host) modifies mw_SipUrl := {
            components := {
                sip := {
                    userInfo := *, 
                    hostPort := {
                        host := p_host
                    }
                }
            }
garciay's avatar
garciay committed
        template(present) SipUrl mw_SipUrl_User_Host(
                                                     template(present) charstring p_user, 
                                                     template charstring p_host
        ) modifies mw_SipUrl := {
garciay's avatar
garciay committed
            components := {
garciay's avatar
garciay committed
                sip := {
                    userInfo := {
                        userOrTelephoneSubscriber := p_user
                    },
                    hostPort := {
                        host := p_host //*     hostname, IPv4 or IPv6 as a charstring
                    }
                }
garciay's avatar
garciay committed
            },
garciay's avatar
garciay committed
            urlParameters := { m_UserPhone }
garciay's avatar
garciay committed
        }
garciay's avatar
garciay committed
        
        template(present) SipUrl mw_SipUrl_Anonymous modifies mw_SipUrl := {
garciay's avatar
garciay committed
            components := {
                sip := {
                    userInfo := {
                        userOrTelephoneSubscriber := pattern "[a,A][n,N][o,O][n,N][y,Y][m,M][o,O][u,U][s,s]",  //*     charstring
garciay's avatar
garciay committed
                        password := omit // TODO STF471: shall be omit or *. If *, remove them die to modifies mw_BasicSipUrl
garciay's avatar
garciay committed
                    },
                    hostPort := {
garciay's avatar
garciay committed
                        host := pattern "[a,A]nonymous.invalid" //*     hostname, IPv4 or IPv6 as a charstring
garciay's avatar
garciay committed
            }
garciay's avatar
garciay committed
        template(present) SipUrl mw_SipUrl_urlParam(template SemicolonParam_List p_urlParameters) modifies mw_SipUrl := {
            urlParameters := p_urlParameters
garciay's avatar
garciay committed
        template(present) ContactAddress mw_ContactAddress := {
            addressField := ?, 
            contactParams := *
        }
garciay's avatar
garciay committed
        template(present) HostPort mw_hostPort(template charstring p_host, template integer p_portField) := {
            host := p_host, 
            portField := p_portField
        }
garciay's avatar
garciay committed
        template(present) StatusLine mw_statusLine_any := {
            sipVersion := c_sipNameVersion, 
            statusCode := ?, 
            reasonPhrase := ?
        }
        
        template(present) StatusLine mw_statusLine(
            in template(present) integer p_statusCode, 
            in template(present) charstring p_reasonPhrase 
        ) modifies mw_statusLine_any := {
            statusCode := p_statusCode, 
            reasonPhrase := p_reasonPhrase
        }
        
        template(present) StatusLine mw_statusLine1xx modifies mw_statusLine_any := {statusCode := (100 .. 199)}
        
        template(present) StatusLine mw_statusLine4xx modifies mw_statusLine_any := { statusCode := (400 .. 499) }
        
        template(present) StatusLine mw_statusLine5xx modifies mw_statusLine_any := { statusCode := (500 .. 599) }
        
        template(present) StatusLine mw_statusLineFinal modifies mw_statusLine_any := { statusCode := (200 .. 699) }
garciay's avatar
garciay committed
        template(present) NameAddr mw_NameAddr_DispName_User_Host(
                                                                  template charstring p_dn, 
                                                                  template(present) charstring p_user, 
                                                                  template charstring p_host) :=
garciay's avatar
garciay committed
            displayName := p_dn,
            addrSpec := {
                scheme := c_sipScheme,  //*     contains "sip"
                components := {
                    sip := {
                        userInfo := {userOrTelephoneSubscriber := p_user, password := *},
                        hostPort := {
garciay's avatar
garciay committed
                            host := p_host,  //*     hostname, IPv4 or IPv6 as a charstring
                            portField := * //*     optional integer
garciay's avatar
garciay committed
                urlParameters := { 
                    m_UserPhone 
                },
garciay's avatar
garciay committed
                headers := *
            }
        }

garciay's avatar
garciay committed
        template(present) Addr_Union mw_AddrUnion_Nameaddr(
                                                           template charstring p_dn, 
                                                           template(present) charstring p_user, 
                                                           template charstring p_host) := {
garciay's avatar
garciay committed
            nameAddr := mw_NameAddr_DispName_User_Host(p_dn, p_user, p_host)
        }

        template(present) Addr_Union mw_AddrUnion_SipUrl(template(present) charstring p_user, template charstring p_host) := {
            addrSpecUnion := mw_SipUrl_User_Host(p_user, p_host)
        }

garciay's avatar
garciay committed
    } //* end group Subfields
garciay's avatar
garciay committed

    group HeaderFieldTemplates {
garciay's avatar
garciay committed
        template(value) LibSip_SIPTypesAndValues.Allow m_Allow(template(value) Method_List p_methods) := {
            fieldName := ALLOW_E, 
            methods := p_methods
        }
garciay's avatar
garciay committed
        template(present) LibSip_SIPTypesAndValues.Allow mw_Allow(template(value) charstring p_method) := {
            fieldName := ALLOW_E, 
            methods := superset(p_method)
        }
garciay's avatar
garciay committed
        template(value) GenericParam m_Cause(template(omit) charstring p_cause) := {
            id := "cause", 
            paramValue := p_cause
        }
        
        template(present) GenericParam mw_Cause_base(template charstring p_cause) := {
            id := "cause", 
            paramValue := p_cause
        }
garciay's avatar
garciay committed
        template(present) GenericParam mw_Cause(template(value) charstring p_cause) := { // TODO - Expression does not work for all TTCN tools
            id := ?, paramValue := 
            pattern "*{p_cause}*"
        }
garciay's avatar
garciay committed
        template(value) Authorization m_Authorization(template(value) Credentials p_credentials) := {
            fieldName := AUTHORIZATION_E, 
            body := {
                p_credentials
            }
        }
        
garciay's avatar
garciay committed
        //     TODO: CR
garciay's avatar
garciay committed
        template(value) Authorization m_Authorization_digest(template(value) CommaParam_List p_commaParam_List) := {
            fieldName := AUTHORIZATION_E, 
            body := {
                {
                    digestResponse := p_commaParam_List
                }
            }
garciay's avatar
garciay committed
        template(present) Authorization mw_Authorization_digest(template(present) CommaParam_List p_commaParam_List) := {
            fieldName := AUTHORIZATION_E, 
            body := {
                {
                    digestResponse := p_commaParam_List
                }
            }
garciay's avatar
garciay committed
        template(value) Authorization m_add_Authorization_digest(template(value) Authorization p_auth, template(value) CommaParam_List p_commaParam_List) := {
            fieldName := AUTHORIZATION_E, 
            body := {
                {
                    digestResponse := f_merge_CommaParam_List(
                                                              p_auth.body[0].digestResponse, 
                                                              p_commaParam_List)
                }
            }
        }
        //     TODO: STF471 this template contains matching symbol, but name suggests it is send template
        template(present) Authorization m_Authorization_other := {
            fieldName := AUTHORIZATION_E, 
            body := {
                {
                    otherResponse := ?
                }
            }
garciay's avatar
garciay committed
        }
garciay's avatar
garciay committed
        template(present) Authorization mw_Authorization_other := {
            fieldName := AUTHORIZATION_E, 
            body := {
                { otherResponse := ? }
            }
        }
garciay's avatar
garciay committed

        template(value) Contact m_Contact(template(value) SipUrl p_sipUrl) := {
            fieldName := CONTACT_E,
garciay's avatar
garciay committed
            contactBody := {
                contactAddresses := {
                    {
                        addressField := { addrSpecUnion := p_sipUrl }, 
                        contactParams := omit
                    }
                }
            } //* end contactBody
        } //* end m_Contact
garciay's avatar
garciay committed

        template(value) Contact m_Contact_profile(template(value) SipUserProfile p_userprofile) := {
            fieldName := CONTACT_E,
garciay's avatar
garciay committed
            contactBody := {contactAddresses := {{addressField := {addrSpecUnion := m_SipUrl_contactIpaddr(p_userprofile)}, contactParams := omit}}} //* end
garciay's avatar
garciay committed
                                                                                                                                                     //*     contactBody
garciay's avatar
garciay committed
        } //* end m_Contact
garciay's avatar
garciay committed


        template(value) Contact m_Contact_profile_expires(template(value) SipUserProfile p_userprofile, template(value) charstring p_expires) := {
            fieldName := CONTACT_E,
            contactBody := {
                contactAddresses := {{addressField := {addrSpecUnion := m_SipUrl_contactIpaddr(p_userprofile)}, contactParams := {{"expires", p_expires}}}}
garciay's avatar
garciay committed
            } //* end contactBody
        } //* end m_Contact
garciay's avatar
garciay committed

        template(value) From m_From(template(value) NameAddr p_nameAddr, template(value) charstring p_tag_str) := {
            fieldName := FROM_E,
garciay's avatar
garciay committed
            addressField := {
                nameAddr := p_nameAddr
            },  //* end addressField
            fromParams := {
                {
                    id := c_tagId, 
                    paramValue := p_tag_str
                }
            }
garciay's avatar
garciay committed
        }

        template(value) From m_From_Anonymous(template(value) charstring p_tag_str) := {
            fieldName := FROM_E,
            addressField := {
                nameAddr :=
garciay's avatar
garciay committed
                    m_NameAddr("Anonymous", //*     optional charstring
garciay's avatar
garciay committed
                               m_SipUrl_Anonymous //*     SipUrl
garciay's avatar
garciay committed
                              )
            }, //* end addressField
            fromParams := {
                {
                    id := c_tagId, 
                    paramValue := p_tag_str
                }
            }
garciay's avatar
garciay committed
        }

        template(value) From m_From_SipUrl(template(value) SipUrl p_sipUrl) := {
            fieldName := FROM_E,
            addressField := {
                nameAddr :=
                    m_NameAddr(omit,
                               //*     optional charstring
                               p_sipUrl //*     SipUrl
garciay's avatar
garciay committed
                               )
            },  //* end addressField
garciay's avatar
garciay committed
            fromParams := omit
        }

garciay's avatar
garciay committed
        template(value) Event m_Event_base := {
            fieldName := EVENT_E, 
            eventType := "", 
            eventParams := omit
        }
garciay's avatar
garciay committed
        template(value) Event m_Event_refer modifies m_Event_base := {
            eventType := "refer"
        }
garciay's avatar
garciay committed

        template(value) Event m_Event_conference modifies m_Event_base := {eventType := "conference"}

        template(value) Event m_Event_presence modifies m_Event_base := {eventType := "presence"}

        template(value) Event m_Event_reg modifies m_Event_base := {eventType := "reg"}

        template(value) Event m_Event_cdiv modifies m_Event_base := {eventType := "comm-div-info"}

        template(value) Event m_Event_mcid := m_Event_cdiv;

        template(value) Expires m_Expires_base := {fieldName := EXPIRES_E, deltaSec := ""}

        template(value) Expires m_Expires_600000 modifies m_Expires_base := {deltaSec := "600000"}

        template(value) Expires m_Expires(template(value) charstring p_deltaSec) modifies m_Expires_base := {deltaSec := p_deltaSec}

        template(present) Expires mw_Expires(template(present) charstring p_deltaSec) := {fieldName := EXPIRES_E, deltaSec := p_deltaSec}

        template(value) HistoryInfo m_HistoryInfo(template(value) HistoryInfo_List p_HistoryInfo_List) := {
            fieldName := HISTORY_INFO_E, historyInfoList := p_HistoryInfo_List
        }

        template(present) HistoryInfo mw_HistoryInfo(template(present) HistoryInfo_List p_HistoryInfo_List) := {
            fieldName := HISTORY_INFO_E, historyInfoList := p_HistoryInfo_List
        }

        template(value) HistoryInfoEntry m_HistoryInfoEntry(template(value) SipUrl p_Url, template(omit) IntegerList p_index,
                                                            template(omit) SemicolonParam_List p_paramlist) := {
            nameAddr := m_NameAddr(omit, p_Url), hiIndex := p_index, hiExtention := p_paramlist
        }

        template(present) HistoryInfoEntry mw_HistoryInfoEntry(template(present) SipUrl p_Url, template IntegerList p_index,
                                                               template SemicolonParam_List p_paramlist) := {
            nameAddr := mw_NameAddr(*, p_Url), hiIndex := p_index, hiExtention := p_paramlist
        }

        template(value) PAssertedID m_PAssertedID(template(value) Addr_Union p_pAssertedIDValue) := {
garciay's avatar
garciay committed
            fieldName := P_ASSERTED_ID_E, pAssertedIDValueList := {p_pAssertedIDValue}
        }

        template(value) PAssertedID m_PAssertedID_2x(template(value) Addr_Union p_pAssertedIDValue, template(value) Addr_Union p_pAssertedIDValue2)
            modifies m_PAssertedID := {
            pAssertedIDValueList := {p_pAssertedIDValue, p_pAssertedIDValue2}
        }

        template(present) PAssertedID mw_PAssertedID(template(present) PAssertedIDValue p_pAssertedIDValue) := {
            fieldName := P_ASSERTED_ID_E, pAssertedIDValueList := {p_pAssertedIDValue}
        }

garciay's avatar
garciay committed
        template(present) PAssertedIDValue mw_PAssertedIDValue(template(present) SipUrl p_SipUrl) := {
            nameAddr := {
                displayName := *, 
                addrSpec := p_SipUrl
            }
        }
garciay's avatar
garciay committed

        template(value) PPreferredID m_PPreferredID(template(value) Addr_Union p_pPreferredIDValue) := {
garciay's avatar
garciay committed
            fieldName := P_PREFERRED_ID_E, 
            pPreferredIDValueList := {
                p_pPreferredIDValue
            }
garciay's avatar
garciay committed
        template(value) Privacy m_Privacy(template(value) PrivacyValue p_privacy) := {
            fieldName := PRIVACY_E, 
            privValueList := { p_privacy }
        }
garciay's avatar
garciay committed
        template(present) Privacy mw_Privacy_Base(template(present) charstring p_value) := {
            fieldName := PRIVACY_E, 
            privValueList := {*, p_value, *}
        }
        
garciay's avatar
garciay committed
        template(present) Privacy mw_Privacy_id := mw_Privacy_Base("id");

        template(present) Privacy mw_Privacy_user := mw_Privacy_Base("user");

        template(value) RAck m_RAck(integer p_responseNum, integer p_seqNumber, charstring p_method) := {
garciay's avatar
garciay committed
            fieldName := RACK_E, 
            responseNum := p_responseNum, 
            seqNumber := p_seqNumber, 
            method := p_method
garciay's avatar
garciay committed
        }

        template(value) Reason m_Reason(template(value) integer p_cause) := {
garciay's avatar
garciay committed
            fieldName := REASON_E, 
            reasonValues := {
                m_ReasonValue(
                    int2str(valueof(p_cause)), 
                    "dummy"
                )
            }
garciay's avatar
garciay committed
        template(value) Reason m_Reason21 := {fieldName := REASON_E, reasonValues := {
            m_ReasonValue(int2str(21), "call reject")}
        }
garciay's avatar
garciay committed
        template(present) Reason mw_Reason_Base := {
            fieldName := REASON_E, 
            reasonValues := { }
        }
garciay's avatar
garciay committed
        template(present) Reason mw_Reason(template(value) charstring p_cause) 
        modifies mw_Reason_Base := {
            reasonValues := {
                mw_ReasonValue(
                    p_cause, 
                    ?
                )
            }
        }
garciay's avatar
garciay committed
        template(present) Reason mw_ReasonSIP(template(value) charstring p_cause) 
        modifies mw_Reason_Base := {
            reasonValues := {
                mw_ReasonValueSIP(
                    p_cause,
                    ?
                )
            }
        }
garciay's avatar
garciay committed

        template(value) RecordRoute m_recordRoute_currIpAddr(template(value) SipUserProfile p_userprofile) := {
            fieldName := RECORD_ROUTE_E,
            routeBody := {
                {
                    nameAddr := {
                        displayName := omit,
                        addrSpec := {
                            scheme := c_sipScheme,  //*     contains "sip"
garciay's avatar
garciay committed
                            components := {
                                sip := {
                                    userInfo := omit, 
                                    hostPort := {
                                        host := p_userprofile.currIpaddr, 
                                        portField := p_userprofile.currPort
                                    }
                                }
                            },
garciay's avatar
garciay committed
                            urlParameters := omit,
                            headers := omit
                        }
                    },
                    rrParam := omit
                }
            }
        }

        //     TODO STF471 addition
        template(value) RecordRoute m_recordRoute_currIpAddr_params(template(value) SipUserProfile p_userprofile,
                                                                    template(value) SemicolonParam_List p_urlParameters) := {
            fieldName := RECORD_ROUTE_E,
            routeBody := {
                {
                    nameAddr := {
                        displayName := omit,
                        addrSpec := {
                            scheme := c_sipScheme,  //*     contains "sip"
garciay's avatar
garciay committed
                            components := {
                                sip := {
                                    userInfo := omit, 
                                    hostPort := {
                                        host := p_userprofile.currIpaddr, 
                                        portField := p_userprofile.currPort
                                    }
                                }
                            },
garciay's avatar
garciay committed
                            urlParameters := p_urlParameters,
                            headers := omit
                        }
                    },
                    rrParam := omit
                }
            }
        }

        template(value) RouteBody m_routeBody_currIpAddr(template(value) SipUserProfile p_userprofile) := {
            nameAddr := {
                displayName := omit,
                addrSpec := {
                    scheme := c_sipScheme,  //*     contains "sip"
garciay's avatar
garciay committed
                    components := {
                        sip := {
                            userInfo := omit, 
                            hostPort := {
                                host := p_userprofile.homeDomain, 
                                portField := p_userprofile.currPort
                            }
                        }
                    },
garciay's avatar
garciay committed
                    urlParameters := omit,
                    headers := omit
                }
            },
            rrParam := omit
        }

        template(value) ReferredBy m_ReferredBy_SipUrl(template(value) SipUrl p_sipUrl) := {
            fieldName := REFERRED_BY_E,
garciay's avatar
garciay committed
            nameAddr := m_NameAddr(                  //     STF471 {displayName
                omit,                                //     := omit,
                p_sipUrl                             //     addrSpec:=p_sipUrl}
            ),
garciay's avatar
garciay committed
            referredbyIdParams := omit
        }

garciay's avatar
garciay committed
        template(value) ReferTo m_ReferTo_SipUrl(template(value) SipUrl p_sipUrl, 
                                                 template(value) charstring p_method) := {
garciay's avatar
garciay committed
            fieldName := REFER_TO_E,
garciay's avatar
garciay committed
            nameAddr := m_NameAddr(                  //     STF471 {displayName
                omit,                                //     := omit,
                p_sipUrl                             //     addrSpec:=p_sipUrl}
            ),
            referToParams := {
                { id := "method", paramValue := p_method }
            }
garciay's avatar
garciay committed
        template(value) ReferSub m_ReferSub(template(value) boolean p_value) := {
            fieldName := REFER_SUB_E, 
            referSubValue := p_value, 
            referSubParams := omit
        }
garciay's avatar
garciay committed
        template(value) Replaces m_Replaces(template(value) charstring p_callId, 
                                            template(value) charstring p_toTag, 
                                            template(value) charstring p_fromTag) := {
garciay's avatar
garciay committed
            fieldName := REPLACES_E,
garciay's avatar
garciay committed
            replacesParams := {
                { id := p_callId, paramValue := omit }, 
                { id := "to-tag", paramValue := p_toTag }, 
                { id := "from-tag", paramValue := p_fromTag }
            }
garciay's avatar
garciay committed
        template(value) Require m_Require_empty := {
            fieldName := REQUIRE_E, 
            optionsTags := { "" }
        }
garciay's avatar
garciay committed
        template(value) Require m_Require_replaces modifies m_Require_empty := {
            optionsTags := { c_replaces }
        }
garciay's avatar
garciay committed
        template(value) Require m_Require_100rel modifies m_Require_empty := {
            optionsTags := { c_tag100rel }
        }
garciay's avatar
garciay committed
        template(value) Require m_Require_prec modifies m_Require_empty := {
            optionsTags := { c_tagPrecond }
        }
garciay's avatar
garciay committed

        template(value) SubscriptionState m_SubscriptionState_active := {
garciay's avatar
garciay committed
            fieldName := SUBSCRIPTION_STATE_E, 
            subState := "active", 
            substateParams := {
                { id := "expires", paramValue := "60000" }
            }
garciay's avatar
garciay committed
        template(value) Supported m_Supported_empty := {
            fieldName := SUPPORTED_E, 
            optionsTags := { "" }
        }
garciay's avatar
garciay committed
        template(value) Supported m_Supported_fromChange modifies m_Supported_empty := {
            optionsTags := { c_tagFromChange }
        }
garciay's avatar
garciay committed
        template(value) Supported m_Supported_prec modifies m_Supported_empty := {
            optionsTags := { c_tagPrecond }
        }
garciay's avatar
garciay committed
        template(value) Supported m_Supported_100rel modifies m_Supported_empty := {
            optionsTags := { c_tag100rel }
        }
garciay's avatar
garciay committed
        template(value) Supported m_Supported_100rel_prec modifies m_Supported_empty := {
            optionsTags := {