--#comment "Copyright (C) Microsoft Corporation, 1999. All rights reserved."--
--#comment "ASN.1 definitions for Connection Negotiation Protocol (GNP)"--

--#SS.basic slinked--   -- set of and sequence of w/o size constraint
--#SS.sized slinked--   -- set of and sequence of w/  size constraint

--******************************************************************************
--*     ASN.1 Definition for CNP PDUs
--******************************************************************************

CNP-PROTOCOL DEFINITIONS AUTOMATIC TAGS ::=

BEGIN

--
--  Nonstandard Parameter Types
--

H221NonStandard ::= SEQUENCE
{
    t35CountryCode      INTEGER(0..255),    -- country, as per T.35
    t35Extension        INTEGER(0..255),    -- assigned nationally
    manufacturerCode    INTEGER(0..65535),  -- assigned nationally
    ...
}

NonStandardIdentifier ::= CHOICE
{
    object              OBJECT IDENTIFIER,
    h221NonStandard     H221NonStandard,
    ...
}

CNP-NonStandardParameter ::= SEQUENCE
{
    nonStandardIdentifier   NonStandardIdentifier,
    data                    OCTET STRING
}

--
-- Alias Types
--

CNP-TransportAddress ::= CHOICE
{
    ipAddress   SEQUENCE
    {
        ip                      OCTET STRING (SIZE (4)),
        port                    INTEGER (0..65535),
        nonStandardParameters   SEQUENCE OF CNP-NonStandardParameter OPTIONAL,
        ...
    },
    ipSourceRoute   SEQUENCE
    {
        ip                      OCTET STRING (SIZE (4)),
        port                    INTEGER (0..65535),
        route                   SEQUENCE OF OCTET STRING (SIZE (4)),
        routing CHOICE
        {
            strict                  NULL,
            loose                   NULL,
            nonStandardRouting      CNP-NonStandardParameter,
            ...
        },
        nonStandardParameters   SEQUENCE OF CNP-NonStandardParameter OPTIONAL,
        ...
    },
    ipxAddress  SEQUENCE
    {
        node                    OCTET STRING (SIZE (6)),
        netnum                  OCTET STRING (SIZE (4)),
        port                    OCTET STRING (SIZE (2)),
        nonStandardParameters   SEQUENCE OF CNP-NonStandardParameter OPTIONAL,
        ...
    },
    ip6Address  SEQUENCE
    {
        ip                      OCTET STRING (SIZE (16)),
        port                    INTEGER (0..65535),
        nonStandardParameters   SEQUENCE OF CNP-NonStandardParameter OPTIONAL,
        ...
    },
    netBios                     OCTET STRING (SIZE (16)),
    nsap                        OCTET STRING (SIZE (1..20)),
    nonStandardTransportAddress CNP-NonStandardParameter,
    ... 
} --#nocode--

NumberDigits ::= IA5String (SIZE (1..128)) (FROM ("0123456789#*,"))

PublicTypeOfNumber ::= CHOICE
{
    unknown                         NULL,
    internationalNumber             NULL,
    nationalNumber                  NULL,
    networkSpecificNumber           NULL,
    subscriberNumber                NULL,
    abbreviatedNumber               NULL,
    nonStandardPublicTypeOfNumber   CNP-NonStandardParameter,
    ...
} --#nocode--

PublicPartyNumber ::= SEQUENCE
{
    publicTypeOfNumber      PublicTypeOfNumber,
    publicNumberDigits      NumberDigits,
    nonStandardParameters   SEQUENCE OF CNP-NonStandardParameter OPTIONAL,
    ...
} --#nocode--

PrivateTypeOfNumber ::= CHOICE
{
    unknown                         NULL,
    level2RegionalNumber            NULL,
    level1RegionalNumber            NULL,
    pISNSpecificNumber              NULL,
    localNumber                     NULL,
    abbreviatedNumber               NULL,
    nonStandardPrivateTypeOfNumber  CNP-NonStandardParameter,
    ...
} --#nocode--

PrivatePartyNumber ::= SEQUENCE
{
    privateTypeOfNumber     PrivateTypeOfNumber,
    privateNumberDigits     NumberDigits,
    nonStandardParameters   SEQUENCE OF CNP-NonStandardParameter OPTIONAL,
    ...
} --#nocode--

PartyNumber ::= CHOICE
{
    publicNumber                PublicPartyNumber,
    dataPartyNumber             NumberDigits,
    telexPartyNumber            NumberDigits,
    privateNumber               PrivatePartyNumber,
    nationalStandardPartyNumber NumberDigits,
    nonStandardPartyNumber      CNP-NonStandardParameter,
    ...
} --#nocode--

AliasAddress ::= CHOICE
{
    e164Address                 NumberDigits,
    name                        BMPString (SIZE (1..256)),
    url                         IA5String (SIZE (1..512)),
    transportAddress            CNP-TransportAddress,
    emailAddress                IA5String (SIZE (1..512)),
    partyNumber                 PartyNumber,
    nonStandardAliasAddress     CNP-NonStandardParameter,
    ...
} --#nocode--

--
--  Service Negotiation Types
--

TPDUSize ::= INTEGER (128..65535)

ReliableTransportProtocolType ::= CHOICE
{
    cnp                             NULL,
    x224                            NULL,
    map                             NULL,
    nonStandardTransportProtocol    CNP-NonStandardParameter,
    ...
} --#nocode--

ReliableTransportProtocol ::= SEQUENCE
{
    type                    ReliableTransportProtocolType,
    maxTPDUSize             TPDUSize,
    nonStandardParameters   SEQUENCE OF CNP-NonStandardParameter OPTIONAL,
    ...
} --#nocode--

ReliableSecurityProtocol ::= CHOICE 
{
    none                        NULL,
    tls                         NULL,
    ssl                         NULL,
    ipsecIKEKeyManagement       NULL,
    ipsecManualKeyManagement    NULL,
    x274WithoutSAID             NULL,
    x274WithSAID                X274WithSAIDInfo,
    physical                    NULL,
    gssApiX224                  NULL,
    nonStandardSecurityProtocol CNP-NonStandardParameter,
    ...
}

UnreliableTransportProtocolType ::= CHOICE
{
    x234                            NULL,
    nonStandardTransportProtocol    CNP-NonStandardParameter,
    ...
} --#nocode--

UnreliableTransportProtocol ::= SEQUENCE
{
    type                    UnreliableTransportProtocolType,
    maxTPDUSize             TPDUSize,
    sourceAddress           CNP-TransportAddress,
    sourceTSAP              OCTET STRING OPTIONAL,
    nonStandardParameters   SEQUENCE OF CNP-NonStandardParameter OPTIONAL,
    ...
} --#nocode--

UnreliableSecurityProtocol ::= CHOICE 
{
    none                        NULL,
    ipsecIKEKeyManagement       NULL,
    ipsecManualKeyManagement    NULL,
    physical                    NULL,
    nonStandardSecurityProtocol CNP-NonStandardParameter,
    ...
} --#nocode--

X274WithSAIDInfo ::= SEQUENCE
{
    localSAID                   OCTET STRING,
    peerSAID                    OCTET STRING,
    ...
}

t123AnnexBProtocolId ProtocolIdentifier ::= { itu-t (0) recommendation (0) t (20) 123 annexb (2) 1}

--
--  CNP PDU Types
--

CNP-Priority ::= INTEGER (0..15)

ProtocolIdentifier ::= OBJECT IDENTIFIER
    -- shall be set to
    -- {itu-t (0) recommendation (0) t (20) 123 annexb (2) 1}

ConnectRequestPDU ::= SEQUENCE
{
    protocolIdentifier            ProtocolIdentifier,
    reconnectRequested            BOOLEAN,
    priority                      CNP-Priority OPTIONAL,
    reliableTransportProtocols    SEQUENCE OF ReliableTransportProtocol OPTIONAL,
    reliableSecurityProtocols     SEQUENCE OF ReliableSecurityProtocol OPTIONAL,
    unreliableTransportProtocols  SEQUENCE OF UnreliableTransportProtocol OPTIONAL,
    unreliableSecurityProtocols   SEQUENCE OF UnreliableSecurityProtocol OPTIONAL,
    destinationAddress            SEQUENCE OF AliasAddress OPTIONAL,
    nonStandardParameters         SEQUENCE OF CNP-NonStandardParameter OPTIONAL,
    ...
}

ConnectConfirmPDU ::= SEQUENCE
{
    protocolIdentifier          ProtocolIdentifier,
    reliableTransportProtocol   ReliableTransportProtocol OPTIONAL,
    reliableSecurityProtocol    ReliableSecurityProtocol OPTIONAL,
    unreliableTransportProtocol UnreliableTransportProtocol OPTIONAL,
    unreliableSecurityProtocol  UnreliableSecurityProtocol OPTIONAL,
    nonStandardParameters       SEQUENCE OF CNP-NonStandardParameter OPTIONAL,
    ...
}

DisconnectReason ::= CHOICE
{
    unacceptableVersion         NULL,
    incompatibleParameters      NULL,
    securityDenied              NULL,
    destinationUnreachable      NULL,
    userRejected                NULL,
    userInitiated               NULL,
    protocolError               NULL,
    unspecifiedFailure          NULL,
    routeToAlternate            NULL,
    nonStandardDisconnectReason CNP-NonStandardParameter,
    ...
}

DisconnectRequestPDU ::= SEQUENCE
{
    disconnectReason            DisconnectReason,
    reliableTransportProtocol   ReliableTransportProtocol OPTIONAL,
    reliableSecurityProtocol    ReliableSecurityProtocol OPTIONAL,
    unreliableTransportProtocol UnreliableTransportProtocol OPTIONAL,
    unreliableSecurityProtocol  UnreliableSecurityProtocol OPTIONAL,
    destinationAddress          SEQUENCE OF AliasAddress OPTIONAL,
    nonStandardParameters       SEQUENCE OF CNP-NonStandardParameter OPTIONAL,
    ...
}

RejectCause ::= CHOICE
{
    unrecognizedPDU         NULL,
    invalidParameter        NULL,
    causeUnspecified        NULL,
    nonStandardRejectCause  CNP-NonStandardParameter,
    ...
} --#nocode--

ErrorPDU ::= SEQUENCE
{
    rejectCause             RejectCause,
    rejectedPDU             OCTET STRING,
    nonStandardParameters   SEQUENCE OF CNP-NonStandardParameter OPTIONAL,
    ...
} --#nocode--

CNP-NonStandardPDU ::= SEQUENCE
{
    nonStandardParameters   SEQUENCE OF CNP-NonStandardParameter OPTIONAL,
    ...
} --#nocode--

CNPPDU ::= CHOICE
{
    connectRequest      ConnectRequestPDU,
    connectConfirm      ConnectConfirmPDU,
    disconnectRequest   DisconnectRequestPDU,
    error               ErrorPDU,
    nonStandardCNPPDU   CNP-NonStandardPDU,
    ...
}

END