-- Module DirectoryShadowAbstractService (X.525 TC2:08/1997)
-- See also ITU-T X.525 (1997) Technical Cor. 2 (02/2001)
-- See also the index of all ASN.1 assignments needed in this document

DirectoryShadowAbstractService {joint-iso-itu-t ds(5) module(1)
  directoryShadowAbstractService(15) 4} DEFINITIONS IMPLICIT TAGS ::=
BEGIN

-- EXPORTS All 
-- The types and values defined in this module are exported for use in the other ASN.1 modules contained 
-- within the Directory Specifications, and for the use of other applications which will use them to access 
-- directory services. Other applications may use them for their own purposes, but this will not constrain
-- extensions and modifications needed to maintain or improve the directory service.
IMPORTS
  -- from ITU-T Rec. X.501 | ISO/IEC 9594-2
  directoryAbstractService, directoryOperationalBindingTypes,
    informationFramework, disp, distributedOperations,
    dsaOperationalAttributeTypes, enhancedSecurity, opBindingManagement
    FROM UsefulDefinitions {joint-iso-itu-t ds(5) module(1)
      usefulDefinitions(0) 3}
  Attribute, AttributeType, CONTEXT, DistinguishedName,
    RelativeDistinguishedName, SubtreeSpecification
    FROM InformationFramework {joint-iso-itu-t ds(5) module(1)
      informationFramework(1) 3}
  OPERATIONAL-BINDING, OperationalBindingID
    FROM OperationalBindingManagement {joint-iso-itu-t ds(5) module(1)
      opBindingManagement(18) 3}
  DSEType, SupplierAndConsumers
    FROM DSAOperationalAttributeTypes {joint-iso-itu-t ds(5) module(1)
      dsaOperationalAttributeTypes(22) 3}
  OPTIONALLY-PROTECTED{}, OPTIONALLY-PROTECTED-SEQ{}
    FROM EnhancedSecurity {joint-iso-itu-t ds(5) module(1) enhancedSecurity(28)
      1}
  -- from ITU-T Rec. X.511 | ISO/IEC 9594-3
  CommonResultsSeq, ContextSelection, directoryBind, directoryUnbind,
    EntryModification, SecurityParameters
    FROM DirectoryAbstractService {joint-iso-itu-t ds(5) module(1)
      directoryAbstractService(2) 3}
  -- from ITU-T Rec. X.518 | ISO/IEC 9594-4
  AccessPoint
    FROM DistributedOperations {joint-iso-itu-t ds(5) module(1)
      distributedOperations(3) 3}
  -- from ITU-T Rec. X.519 | ISO/IEC 9594-5
  id-op-binding-shadow
    FROM DirectoryOperationalBindingTypes {joint-iso-itu-t ds(5) module(1)
      directoryOperationalBindingTypes(25) 3}
  id-errcode-shadowError, id-opcode-coordinateShadowUpdate,
    id-opcode-requestShadowUpdate, id-opcode-updateShadow,
    reliableShadowSupplierInitiatedAC, reliableShadowConsumerInitiatedAC,
    shadowConsumerInitiatedAC, shadowSupplierInitiatedAC
    FROM DirectoryInformationShadowProtocol {joint-iso-itu-t ds(5) module(1)
      disp(16) 3}
  -- from ITU-T Rec. X.880 | ISO/IEC 13712-1
  ERROR, OPERATION
    FROM Remote-Operations-Information-Objects {joint-iso-itu-t
      remote-operations(4) informationObjects(5) version1(0)};

-- bind and unbind operations 
dSAShadowBind OPERATION ::= directoryBind

dSAShadowUnbind OPERATION ::= directoryUnbind

-- shadow operational binding 
shadowOperationalBinding OPERATIONAL-BINDING ::= {
  AGREEMENT             ShadowingAgreementInfo
  APPLICATION CONTEXTS
    {{shadowSupplierInitiatedAC
      APPLIES TO  {All-operations-supplier-initiated}} |
      {shadowConsumerInitiatedAC
       APPLIES TO  {All-operations-consumer-initiated}} |
      {reliableShadowSupplierInitiatedAC
       APPLIES TO  {All-operations-supplier-initiated}} |
      {reliableShadowConsumerInitiatedAC
       APPLIES TO  {All-operations-consumer-initiated}}}
  ASYMMETRIC ROLE-A
    { -- shadow supplier roleESTABLISHMENT-INITIATOR  TRUE
                             ESTABLISHMENT-PARAMETER  NULL
                             MODIFICATION-INITIATOR   TRUE
                             TERMINATION-INITIATOR    TRUE}
  ROLE-B
    { -- shadow consumer roleESTABLISHMENT-INITIATOR  TRUE
                             ESTABLISHMENT-PARAMETER  NULL
                             MODIFICATION-INITIATOR   TRUE
                             MODIFICATION-PARAMETER   ModificationParameter
                             TERMINATION-INITIATOR    TRUE}
  ID                    id-op-binding-shadow
}

-- types 
ModificationParameter ::= SEQUENCE {
  secondaryShadows  SET OF SupplierAndConsumers
}

AgreementID ::= OperationalBindingID

ShadowingAgreementInfo ::= SEQUENCE {
  shadowSubject     UnitOfReplication,
  updateMode        UpdateMode DEFAULT supplierInitiated:onChange:TRUE,
  master            AccessPoint OPTIONAL,
  secondaryShadows  [2]  BOOLEAN DEFAULT FALSE
}

UnitOfReplication ::= SEQUENCE {
  area              AreaSpecification,
  attributes        AttributeSelection,
  knowledge         Knowledge OPTIONAL,
  subordinates      BOOLEAN DEFAULT FALSE,
  contextSelection  ContextSelection OPTIONAL,
  supplyContexts
    [0]  CHOICE {allContexts       NULL,
                 selectedContexts  SET SIZE (1..MAX) OF CONTEXT.&id
  } OPTIONAL
}

AreaSpecification ::= SEQUENCE {
  contextPrefix    DistinguishedName,
  replicationArea  SubtreeSpecification
}

Knowledge ::= SEQUENCE {
  knowledgeType      ENUMERATED {master(0), shadow(1), both(2)},
  extendedKnowledge  BOOLEAN DEFAULT FALSE
}

AttributeSelection ::= SET OF ClassAttributeSelection

ClassAttributeSelection ::= SEQUENCE {
  class            OBJECT IDENTIFIER OPTIONAL,
  classAttributes  ClassAttributes DEFAULT allAttributes:NULL
}

ClassAttributes ::= CHOICE {
  allAttributes  NULL,
  include        [0]  AttributeTypes,
  exclude        [1]  AttributeTypes
}

AttributeTypes ::= SET OF AttributeType

UpdateMode ::= CHOICE {
  supplierInitiated  [0]  SupplierUpdateMode,
  consumerInitiated  [1]  ConsumerUpdateMode
}

SupplierUpdateMode ::= CHOICE {
  onChange   BOOLEAN,
  scheduled  SchedulingParameters
}

ConsumerUpdateMode ::= SchedulingParameters

SchedulingParameters ::= SEQUENCE {
  periodic    PeriodicStrategy OPTIONAL, -- must be present if othertimes is set to FALSE 
  othertimes  BOOLEAN DEFAULT FALSE
}

PeriodicStrategy ::= SEQUENCE {
  beginTime       Time OPTIONAL,
  windowSize      INTEGER,
  updateInterval  INTEGER
}

Time ::= GeneralizedTime

-- as per 34.2 b) and c) of CCITT Rec. X.208 and ISO/IEC 8824
-- shadow operations, arguments, and results 
All-operations-consumer-initiated OPERATION ::=
  {requestShadowUpdate | updateShadow}

All-operations-supplier-initiated OPERATION ::=
  {coordinateShadowUpdate | updateShadow}

coordinateShadowUpdate OPERATION ::= {
  ARGUMENT  CoordinateShadowUpdateArgument
  RESULT    CoordinateShadowUpdateResult
  ERRORS    {shadowError}
  CODE      id-opcode-coordinateShadowUpdate
}

CoordinateShadowUpdateArgument ::=
  OPTIONALLY-PROTECTED
    {[0]  SEQUENCE {agreementID         AgreementID,
                    lastUpdate          Time OPTIONAL,
                    updateStrategy
                      CHOICE {standard
                                ENUMERATED {noChanges(0), incremental(1),
                                            total(2)},
                              other     EXTERNAL},
                    securityParameters  SecurityParameters OPTIONAL}}

CoordinateShadowUpdateResult ::= CHOICE {
  null         NULL,
  information
    OPTIONALLY-PROTECTED{[0]  SEQUENCE {greementID  AgreementID,
                                        lastUpdate  Time OPTIONAL,
                                        COMPONENTS OF CommonResultsSeq
      }}
}

requestShadowUpdate OPERATION ::= {
  ARGUMENT  RequestShadowUpdateArgument
  RESULT    RequestShadowUpdateResult
  ERRORS    {shadowError}
  CODE      id-opcode-requestShadowUpdate
}

RequestShadowUpdateArgument ::=
  OPTIONALLY-PROTECTED
    {[0]  SEQUENCE {agreementID         AgreementID,
                    lastUpdate          Time OPTIONAL,
                    requestedStrategy
                      CHOICE {standard  ENUMERATED {incremental(1), total(2)},
                              other     EXTERNAL},
                    securityParameters  SecurityParameters OPTIONAL}}

RequestShadowUpdateResult ::= CHOICE {
  null         NULL,
  information
    OPTIONALLY-PROTECTED{[0]  SEQUENCE {agreementID  AgreementID,
                                        lastUpdate   Time OPTIONAL,
                                        COMPONENTS OF CommonResultsSeq
      }}
}

updateShadow OPERATION ::= {
  ARGUMENT  UpdateShadowArgument
  RESULT    UpdateShadowResult
  ERRORS    {shadowError}
  CODE      id-opcode-updateShadow
}

UpdateShadowArgument ::=
  OPTIONALLY-PROTECTED
    {[0]  SEQUENCE {agreementID         AgreementID,
                    updateTime          Time,
                    updateWindow        UpdateWindow OPTIONAL,
                    updatedInfo         RefreshInformation,
                    securityParameters  SecurityParameters OPTIONAL}}

UpdateShadowResult ::= CHOICE {
  null         NULL,
  information
    OPTIONALLY-PROTECTED{[0]  SEQUENCE {agreementID  AgreementID,
                                        lastUpdate   Time OPTIONAL,
                                        COMPONENTS OF CommonResultsSeq
      }}
}

UpdateWindow ::= SEQUENCE {start  Time,
                           stop   Time
}

RefreshInformation ::= CHOICE {
  noRefresh      NULL,
  total          [0]  TotalRefresh,
  incremental    [1]  IncrementalRefresh,
  otherStrategy  EXTERNAL
}

TotalRefresh ::= SEQUENCE {
  sDSE     SDSEContent OPTIONAL,
  subtree  SET SIZE (1..MAX) OF Subtree OPTIONAL
}

SDSEContent ::= SEQUENCE {
  sDSEType          SDSEType,
  subComplete       [0]  BOOLEAN DEFAULT FALSE,
  attComplete       [1]  BOOLEAN OPTIONAL,
  attributes        SET OF Attribute,
  attValIncomplete  SET OF AttributeType DEFAULT {}
}

SDSEType ::= DSEType

Subtree ::= SEQUENCE {
  rdn  RelativeDistinguishedName,
  COMPONENTS OF TotalRefresh
}

IncrementalRefresh ::= SEQUENCE OF IncrementalStepRefresh

IncrementalStepRefresh ::= SEQUENCE {
  sDSEChanges
    CHOICE {add     [0]  SDSEContent,
            remove  NULL,
            modify  [1]  ContentChange} OPTIONAL,
  subordinateUpdates  SEQUENCE SIZE (1..MAX) OF SubordinateChanges OPTIONAL
}

ContentChange ::= SEQUENCE {
  rename
    CHOICE {newRDN  RelativeDistinguishedName,
            newDN   DistinguishedName} OPTIONAL,
  attributeChanges
    CHOICE {replace  [0]  SET SIZE (1..MAX) OF Attribute,
            changes  [1]  SEQUENCE SIZE (1..MAX) OF EntryModification
  } OPTIONAL,
  sDSEType          SDSEType,
  subComplete       [2]  BOOLEAN DEFAULT FALSE,
  attComplete       [3]  BOOLEAN OPTIONAL,
  attValIncomplete  SET OF AttributeType DEFAULT {}
}

SubordinateChanges ::= SEQUENCE {
  subordinate  RelativeDistinguishedName,
  changes      IncrementalStepRefresh
}

-- errors and parameters 
shadowError ERROR ::= {
  PARAMETER OPTIONALLY-PROTECTED-SEQ
    {SEQUENCE {problem       ShadowProblem,
               lastUpdate    Time OPTIONAL,
               updateWindow  UpdateWindow OPTIONAL,
               COMPONENTS OF CommonResultsSeq}}
  CODE                                id-errcode-shadowError
}

ShadowProblem ::= INTEGER {
  invalidAgreementID(1), inactiveAgreement(2), invalidInformationReceived(3),
  unsupportedStrategy(4), missedPrevious(5), fullUpdateRequired(6),
  unwillingToPerform(7), unsuitableTiming(8), updateAlreadyReceived(9),
  invalidSequencing(10), insufficientResources(11)}

END -- DirectoryShadowAbstractService
-- Generated by Asnp, the ASN.1 pretty-printer of France Telecom R&D