-- nrs-enc.py - additional QUIPU NRS type definitions module

--
--				  NOTICE
--
--    Acquisition, use, and distribution of this module and related
--    materials are subject to the restrictions of a license agreement.
--    Consult the Preface in the User's Manual for the full terms of
--    this agreement.
--
--


QuipuNRS
	{
	ccitt
	data(9)
	pss(2342)
	ucl(19200300)
	quipu(99)
	nRSDefinitions(2)
	}

DEFINITIONS
::=

%{
#include <stdio.h>
#include "quipu/util.h"
#include "quipu/nrs_info.h"

extern  LLog    * log_dsap;
#define encode_UNIV_NumericString build_UNIV_NumericString
#define encode_UNIV_VisibleString build_UNIV_VisibleString
#define encode_UNIV_OCTETSTRING build_UNIV_OCTETSTRING
%}

PREFIXES encode decode print

BEGIN

ENCODER encode

Context [[P int]]
::=
        INTEGER [[i parm]]
        {
            context-unknown(-1) ,
            x29(0) ,
            ts29(1) ,
            niftp(2) ,
            mail-niftp(3) ,
            not-used(4) ,
            mail-telex(5) ,
            jtmp(6) ,
            jtmp-files(7) ,
            jtmp-reg(8) ,
            ybts-node(9) ,
            ybts(10) ,
            ftam(11) ,
            jtm(12) ,
            jtm-reg(13) ,
            vt(14) ,
            motis(15)
        }

Address-space-id [[P int]]
::=
        INTEGER [[i parm]]
        {
            pss(0) ,
            janet(1) ,
            telex(2) ,
            osi-cons(3)
        }

Route-cost [[P PE]]
::=
        ANY [[a parm]]

Addressing-info [[P struct addr_info *]]
    %{
	struct str_seq	* ss;
    %}
::=
        CHOICE
            <<parm->addr_info_type>>
        {
        dte-only
		[0] NumericString [[s parm->dte_number]] ,

        dte-appli-info
		[1] SEQUENCE
                {
                dte-number
			[0] NumericString [[s parm->dte_number]] ,

                applic-info
			[1] SEQUENCE OF
                            <<ss = parm->applic_info; ss; ss=ss->ss_next>>
                        	VisibleString [[s ss->ss_str]]
                } ,

        dte-cudf
		[2] SEQUENCE
                {
                dte-number
			[0] NumericString [[s parm->dte_number]] ,

                cudf
			[1] OCTET STRING [[s parm->cudf]]
                } ,

        dte-cudf-applic-info
		[3] SEQUENCE
                {
                dte-number
			[0] NumericString [[s parm->dte_number]] ,

                cudf
			[1] OCTET STRING [[s parm->cudf]] ,

                applic-info
			[2] SEQUENCE OF
                            <<ss = parm->applic_info; ss; ss=ss->ss_next>>
                        	VisibleString [[s ss->ss_str]]
                } ,

        dte-ybts
		[4] SEQUENCE
                {
                dte-number
			[0] NumericString [[s parm->dte_number]] ,

                ybts-string
			[1] VisibleString [[s parm->ybts_string]]
                } ,

        dte-ybts-applic-info
		[5] SEQUENCE
                {
                dte-number
			[0] NumericString [[s parm->dte_number]] ,

                ybts-string
			[1] VisibleString [[s parm->ybts_string]] ,

                applic-info
			[2] SEQUENCE OF
                            <<ss = parm->applic_info; ss; ss=ss->ss_next>>
                        	VisibleString [[s ss->ss_str]]
                } ,

        dte-ybts-appli-relays
		[6] SEQUENCE
                {
                dte-number
			[0] NumericString [[s parm->dte_number]] ,

                ybts-string
			[1] VisibleString [[s parm->ybts_string]] ,

                applic-relay
			[2] SEQUENCE OF
                            <<ss = parm->applic_relay; ss; ss=ss->ss_next>>
                        	VisibleString [[s ss->ss_str]]
                } ,

        none-needed
		[7] NULL ,

        osi-addressing
		[8] SEQUENCE
                {
                nsap
			[0] NumericString [[s parm->nsap]] ,

                tselector
			[1] OCTET STRING [[s parm->tselector]]
                            OPTIONAL <<parm->tselector>> ,

                sselector
			[2] OCTET STRING [[s parm->sselector]]
                            OPTIONAL <<parm->sselector>> ,

                pselector
			[3] OCTET STRING [[s parm->pselector]]
                            OPTIONAL <<parm->pselector>> ,

                place-holder
			[4] ANY [[a parm->place_holder]]
                            OPTIONAL <<parm->place_holder>> ,

                application-title
			[5] ANY [[a parm->application_title]]
                            OPTIONAL <<parm->application_title>> ,

                per-application-context-info
			[6] ANY [[a parm->per_app_context_info]]
                            OPTIONAL <<parm->per_app_context_info>>
                } ,

        osi-nsap-only
		[9] NumericString [[s parm->nsap]] ,

        osi-nsap-applic-info
		[10] SEQUENCE
                {
                nsap
			[0] NumericString [[s parm->nsap]] ,

                applic-info
			[1] SEQUENCE OF
                            <<ss = parm->applic_info; ss; ss=ss->ss_next>>
                        	VisibleString [[s ss->ss_str]]
                } ,

        osi-nsap-applic-relays
		[11] SEQUENCE
                {
                nsap
			[0] NumericString [[s parm->nsap]] ,

                applic-relay
			[1] SEQUENCE OF
                            <<ss = parm->applic_relay; ss; ss=ss->ss_next>>
                                VisibleString [[s ss->ss_str]]
                } ,

	dte-ybts-osi-addressing
		[12] SEQUENCE
		{
                dte-number
			[0] NumericString [[s parm->dte_number]] ,

                ybts-string
			[1] VisibleString [[s parm->ybts_string]] ,

                tselector
			[2] OCTET STRING [[s parm->tselector]]
                            OPTIONAL <<parm->tselector>> ,

                sselector
			[3] OCTET STRING [[s parm->sselector]]
                            OPTIONAL <<parm->sselector>> ,

                pselector
			[4] OCTET STRING [[s parm->pselector]]
                            OPTIONAL <<parm->pselector>> ,

                place-holder
			[5] ANY [[a parm->place_holder]]
                            OPTIONAL <<parm->place_holder>> ,

                application-title
			[6] ANY [[a parm->application_title]]
                            OPTIONAL <<parm->application_title>> ,

                per-application-context-info
			[7] ANY [[a parm->per_app_context_info]]
                            OPTIONAL <<parm->per_app_context_info>>
		}
        }

NRSInformation [[P struct nrs_info *]]
    %{
	struct nrs_routes	* rt;
    %}
::=
	SET
	{
		[0] Context [[p parm->context]] ,
		[1] Address-space-id [[p parm->addr_sp_id]] ,
	routes
		[2] SEQUENCE OF
		    <<rt=parm->routes; rt; rt=rt->next>>
			SEQUENCE
			{
				Route-cost [[p rt->cost]] ,
				Addressing-info [[p rt->addr_info]]
			}
	}

END
