next up previous contents
Next: EMSD-IPM ASN.1 MODULE Up: Informational RFC-2524 M. Banan Previous: AUTHOR'S ADDRESS

EMSD-P ASN.1 MODULE

This section compiles in one place the complete ASN.1 Module for EM Submission and Delivery Protocol.

EMSD-SubmissionAndDeliveryProtocol DEFINITIONS ::=

BEGIN

EXPORTS EMSDORAddress, AsciiPrintableString, ContentType, 
DateTime, EMSDMessageId, EMSDORAddress, ProtocolVersionNumber;

-- Upper bounds

ub-recipients  INTEGER ::= 256;
-- also defined in EMSD-InterpersonalMessaging1995
ub-reply-to INTEGER ::= 256;
-- also defined in EMSD-InterpersonalMessaging1995
ub-subject-field INTEGER ::= 128;
-- also defined in EMSD-InterpersonalMessaging1995
ub-password-length INTEGER ::= 16;
ub-content-length INTEGER ::= 65535;
-- also defined in EMSD-Probe
ub-content-types INTEGER ::= 128;
ub-message-id-length INTEGER ::= 127;
ub-total-number-of-segments INTEGER ::= 32;
ub-header-extensions INTEGER ::= 64;
-- also defined in EMSD-InterpersonalMessaging1995
ub-emsd-name-length INTEGER ::= 64;
ub-emsd-address-length INTEGER ::= 20;
ub-rfc822-name-length INTEGER ::= 127;
ub-mime-version-length INTEGER ::= 8;
-- also defined in EMSD-InterpersonalMessaging1995
ub-mime-content-type-length INTEGER ::= 127;
-- also defined in EMSD-InterpersonalMessaging1995
ub-mime-content-id-length INTEGER ::= 127;
-- also defined in EMSD-InterpersonalMessaging1995
ub-mime-content-description-length INTEGER ::= 127;
-- also defined in EMSD-InterpersonalMessaging1995
ub-mime-content-transfer-encoding INTEGER ::= 127;
-- also defined in EMSD-InterpersonalMessaging1995
ub-local-message-nu INTEGER ::= 4096;

----------------------
-- SUBMIT Operation --
----------------------

submit ES-OPERATION

    ARGUMENT SubmitArgument
    RESULT SubmitResult
    ERRORS
    {
        submissionControlViolated,
        securityError,
        resourceError,
        protocolViolation,
        messageError
    } ::= 33;

SubmitArgument ::= SEQUENCE
{
  -- Security features
  security           [0]    IMPLICIT SecurityElement 
                            OPTIONAL,

  -- Segmentation features for efficient transport
  segment-info                  SegmentInfo OPTIONAL,

  -- Content type of the message
  content-type                            ContentType,

  --
  -- THE CONTENT --
  --

  -- The submission content
  content                       ANY DEFINED BY content-type

};

SubmitResult ::= SEQUENCE

{

  -- Permanent identifier for this message.
  -- Also contains the message submission time.
  -- See comment regarding assignment of message 
  -- identifiers, at the definition of EMSDLocalMessageId.
  message-id                        EMSDLocalMessageId
    };

--------------------------------
-- Delivery Control Operation --
--------------------------------

deliveryControl ES-OPERATION
    ARGUMENT DeliveryControlArgument
    RESULT DeliveryControlResult
    ERRORS
    {
        securityError,
        resourceError,
        protocolViolation
    } ::= 2;

DeliveryControlArgument ::= SEQUENCE
{
  -- Request an addition of or removal of a set of restrictions
  restrict             [0]     IMPLICIT Restrict DEFAULT update,

  -- Which operations are to be placed in the restriction set
  permissible-operations  [1]     IMPLICIT Operations OPTIONAL,

  -- What maximum content length should be allowed
  permissible-max-content-length
                          [2]     IMPLICIT INTEGER
                                  (0..ub-content-length) OPTIONAL,

  -- What is the lowest priority message which may be delivered
  permissible-lowest-priority
                          [3]     IMPLICIT ENUMERATED
                                  {
                                     non-urgent     (0),
                                     normal         (1),
                                     urgent         (2)
                                  } OPTIONAL,

  -- Security features
  security                  [4]     IMPLICIT SecurityElement
                                                  OPTIONAL,

  -- User Feature selection
  user-features             [5]     IMPLICIT OCTET STRING OPTIONAL
};

DeliveryControlResult ::= SEQUENCE
{
  -- Operation types queued at the EMSD-SA due to existing
  -- restrictions.
  waiting-operations    [0]   IMPLICIT Operations DEFAULT { },


  -- Types of messages queued at the EMSD-SA due to
  -- existing restrictions
  waiting-messages      [1]   IMPLICIT WaitingMessages DEFAULT { },

  -- Content Types of messages queued at the EMSD-SA
  waiting-content-types   SEQUENCE SIZE (0..ub-content-types) OF
                                        ContentType DEFAULT { }
};

Restrict ::= ENUMERATED
{
    update                                      (1),
    remove                                      (2)
};

Operations ::= BIT STRING
{
    submission                                  (0),
    delivery                                    (1)
};


WaitingMessages ::= BIT STRING
{
    long-content                                (0),
    low-priority                                (1)
};

-- Delivery Verify Operation

deliveryVerify ES-OPERATION

    ARGUMENT DeliveryVerifyArgument
    RESULT DeliveryVerifyResult
    ERRORS
    {
        verifyError,
        resourceError,
        protocolViolation
    } ::= 5;

DeliveryVerifyArgument ::= SEQUENCE
{
  -- Identifier of this message. This is the same identifier that
  -- was provided to the originator in the Submission Result.
  -- See comment regarding assignment of message identifiers,
  -- at the definition of EMSDMessageId.
  message-id                                      EMSDMessageId
};

DeliveryVerifyResult ::= SEQUENCE
{
                         status  DeliveryStatus
};

 DeliveryStatus  ::= ENUMERATED
{
        no-report-is-sent-out                   (1),
        delivery-report-is-sent-out             (2),
        non-delivery-report-is-sent-out         (3)
};

-----------------------
-- DELIVER Operation --
-----------------------

deliver ES-OPERATION
    ARGUMENT DeliverArgument
    RESULT NULL
    ERRORS
    {
        deliveryControlViolated,
        securityError,
        resourceError,
        protocolViolation,
        messageError
    } ::= 35;

DeliverArgument ::= SEQUENCE
{
  -- Identifier of this message. This is the same identifier that
  -- was provided to the originator in the Submission Result.
  -- See comment regarding assignment of message identifiers,
  -- at the definition of EMSDMessageId.
  message-id                                      EMSDMessageId,

  -- Time the message was delivered to the recipient by EMSD-SA
  message-delivery-time                           DateTime,

  -- Time EMSD-SA originally took responsibility for processing
  -- of this message. This field shall be omitted if the message-id
  -- contains an EMSDLocalMessageId, because that field contains
  -- the submission time within it.
  message-submission-time [0]     IMPLICIT   DateTime OPTIONAL,

  -- Security features
  security                [1]     IMPLICIT   SecurityElement OPTIONAL,

  -- SegContentTypementation features for efficient transport
  segment-info                               SegmentInfo OPTIONAL,

  -- The type of the content
  content-type                               ContentType,

  --
  -- THE CONTENT --
  --

  -- The submitted (and now being delivered) content
  content                       ANY DEFINED BY content-type
};

-- Submission Control Operation

submissionControl ES-OPERATION
    ARGUMENT SubmissionControlArgument
    RESULT SubmissionControlResult
    ERRORS
    {
        securityError,
        resourceError,
        protocolViolation
    } ::= 4;

SubmissionControlArgument ::= SEQUENCE
{
  -- Request an addition of or removal of a set of restrictions
  restrict               [0]     IMPLICIT Restrict DEFAULT update,

  -- Which operations are to be placed in the restriction set
  permissible-operations  [1]     IMPLICIT Operations OPTIONAL,

  -- What maximum content length should be allowed
  permissible-max-content-length
                          [2]     IMPLICIT INTEGER
                                  (0..ub-content-length) OPTIONAL,

  -- Security features
  security                [3]     IMPLICIT SecurityElement
                                                  OPTIONAL
};

SubmissionControlResult ::= SEQUENCE
{
  -- Operation types queued at the EMSD-SA due to existing
  -- restrictions.
  waiting-operations    [0]   IMPLICIT Operations DEFAULT { }

};

----------------------------------
-- Submission Verify Operation --
----------------------------------

submissionVerify  ES-OPERATION

    ARGUMENT SubmissionVerifyArgument
    RESULT SubmissionVerifyResult
    ERRORS
    {
        submissionVerifyError,
        resourceError,
        protocolViolation
    } ::= 6;

SubmissionVerifyArgument ::= SEQUENCE
  -- Identifier of this message. This is the same identifier that
  -- was provided to the originator in the Submission Result.
  -- See comment regarding assignment of message identifiers,
  -- at the definition of EMSDMessageId.
  {
     message-id                       EMSDMessageId
  };

SubmissionVerifyResult ::= SEQUENCE
    {
        status  SubmissionStatus
    };

SubmissionStatus::= ENUMERATED
{
        send-message            (1),
        drop-message            (2)
};

-- GetConfiguration Operation
-- To be fully defined later. This will possibly include,
-- but not be limited to:
--      get-local-time-zone
--      get-protocol-version
--      etc.

getConfiguration ES-OPERATION

        ARGUMENT NULL
        RESULT NULL
        ERRORS
        {
            resourceError,
            protocolViolation
        } ::= 7;

-- SetConfiguration Operation
-- To be fully defined later.

setConfiguration ES-OPERATION

        ARGUMENT NULL
        RESULT NULL
        ERRORS
        {
            resourceError,
            protocolViolation
        } ::= 8;

-- Security --

SecurityElement ::= SEQUENCE

{
  credentials                   Credentials,
  contentIntegrityCheck         ContentIntegrityCheck OPTIONAL
};

Credentials ::= CHOICE
{
  simple                          [0]   IMPLICIT SimpleCredentials
  -- Strong Credentials are for future study
  -- strong                       [1]   IMPLICIT StrongCredentials
  -- externalProcedure            [2]   EXTERNAL
};

SimpleCredentials ::= SEQUENCE

{
  eMSDAddress                         EMSDAddress OPTIONAL,
  password                    [0]     IMPLICIT OCTET STRING
                              (SIZE (0..ub-password-length)) OPTIONAL
};

-- StrongCredentials ::= NULL
-- for now.

-- ContentIntegrityCheck is a 16-bit checksum of content
ContentIntegrityCheck ::= INTEGER (0..65535);

SegmentInfo ::= CHOICE

{
  first           [APPLICATION 2]         IMPLICIT FirstSegment,
  other           [APPLICATION 3]         IMPLICIT OtherSegment
};

FirstSegment ::= SEQUENCE

{
  sequence-id                             INTEGER,
  number-of-segments                      INTEGER
  -- number-of-segments must not exceed ub-total-number-of-segments

};

OtherSegment ::= SEQUENCE
{
  sequence-id                             INTEGER,
  segment-number                          INTEGER
};

-----------
-- Errors --
------------

protocolVersionNotRecognized  ERROR PARAMETER NULL ::= 1;

submissionControlViolated  ERROR PARAMETER NULL ::= 2;

messageIdentifierInvalid  ERROR PARAMETER NULL ::= 3;

securityError ERROR PARAMETER security-problem SecurityProblem ::= 4;

deliveryControlViolated   ERROR PARAMETER NULL ::= 5;

resourceError  ERROR PARAMETER NULL ::= 6;

protocolViolation  ERROR PARAMETER NULL ::= 7;

messageError  ERROR PARAMETER NULL ::= 8;

SecurityProblem ::= INTEGER (0..127);


--
-- EXPORTED Definitions (for use by associated specifications) --
--

ContentType ::=  INTEGER
{
  -- Content type 0 is reserved and shall never be transmitted.
  reserved                                 (0),
  -- Content types between 1 and 31 (inclusive) are for
  -- internal-use only
  probe                                    (1), -- reserved
  delivery-report                          (2), -- reserved

  -- Content types between 32 and 63 (inclusive) are for
  -- message types  defined within this specifications.
  emsd-interpersonal-messaging-1995        (32),
  voice-messaging                          (33) -- reserved

  -- Content types beyond and including 64 are for
  -- bilaterally-agreed use between peers.
} (0..127);


-- If this message was originated as an RFC-822 message, then this
-- EMSDMessageId shall be the "Message-Id:" field from that message.
-- If this message was originated within the EMSD domain, 
-- then this identifier shall be unique for the Message Center 
-- generating this id.

EMSDMessageId ::= CHOICE
{
  emsdLocalMessageId     [APPLICATION 4]  IMPLICIT  
                         EMSDLocalMessageId,
  rfc822MessageId        [APPLICATION 5]  IMPLICIT  
                         AsciiPrintableString
                         (SIZE (0..ub-message-id-length))

};

EMSDLocalMessageId ::= SEQUENCE
{
  submissionTime                  DateTime,
  messageNumber                   INTEGER (0..ub-local-message-nu)
};

-- An Originator/Recipient Address in EMSD Environment

EMSDORAddress ::= CHOICE
{
  -- This is the local-format address
  emsd-local-address-format            EMSDAddress,


  -- This is a globally-unique RFC-822 Address
  rfc822DomainAddress                 AsciiPrintableString
};



EMSDAddress ::= SEQUENCE
{
  emsd-address         OCTET STRING 
                                 (SIZE (1..ub-emsd-address-length)),

  -- emsd-address is a decimal integer in BCD (Binary Encoded Decimal)
  -- format.
  -- If it had an odd number of digits, it is padded with 0 on 
  -- the left.

  emsd-name                [0]     IMPLICIT OCTET STRING
                                   (SIZE (0..ub-emsd-name-length))
                                   OPTIONAL
};

DateTime ::= INTEGER;

Iso8859String ::=  GeneralString;

AsciiPrintableString ::= [ APPLICATION 0 ] 
                         IMPLICIT Iso8859String (FROM

    (" "|"!"|"#"|"$"|"%"|"&"|"'"|"("|")"|"*"|"+"|","|"-"|"."|"/"|
     "0"|"1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9"|":"|";"|"<"|"="|">"|
     "?"|"@"|"A"|"B"|"C"|"D"|"E"|"F"|"G"|"H"|"I"|"J"|"K"|"L"|"M"|
     "N"|"O"|"P"|"Q"|"R"|"S"|"T"|"U"|"V"|"W"|"X"|"Y"|"Z"|"["|"]"|
     "^"|"_"|"`"|"a"|"b"|"c"|"d"|"e"|"f"|"g"|"h"|"i"|"j"|"k"|"l"|
     "m"|"n"|"o"|"p"|"q"|"r"|"s"|"t"|"u"|"v"|"w"|"x"|"y"|"z"|"{"|
     "|"|"}"|"~"|"\"|""""));

ProtocolVersionNumber ::= [APPLICATION 1]    SEQUENCE
{
  version-major                   INTEGER,
  version-minor           [0]     IMPLICIT INTEGER DEFAULT 0
}
END  -- end of EMSD-SubmissionAndDeliveryProtocol