-- Module DirectoryShadowAbstractService (X.525:10/2012)
-- See also ITU-T X.525 (10/2012)
-- See also the index of all ASN.1 assignments needed in this document

DirectoryShadowAbstractService {joint-iso-itu-t ds(5) module(1)
  directoryShadowAbstractService(15) 7} 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 Rec. ITU-T X.501 | ISO/IEC 9594-2
  commonProtocolSpecification, directoryAbstractService,
    directoryOperationalBindingTypes, informationFramework,
    directoryOSIProtocols, distributedOperations, dsaOperationalAttributeTypes,
    enhancedSecurity, opBindingManagement
    FROM UsefulDefinitions {joint-iso-itu-t ds(5) module(1)
      usefulDefinitions(0) 7}
  Attribute{}, AttributeType, CONTEXT, DistinguishedName,
    RelativeDistinguishedName, SubtreeSpecification, SupportedAttributes
    FROM InformationFramework informationFramework
  OPERATIONAL-BINDING, OperationalBindingID
    FROM OperationalBindingManagement opBindingManagement
  DSEType, SupplierAndConsumers
    FROM DSAOperationalAttributeTypes dsaOperationalAttributeTypes
  OPTIONALLY-PROTECTED{}, OPTIONALLY-PROTECTED-SEQ{}
    FROM EnhancedSecurity enhancedSecurity
  -- from Rec. ITU-T X.511 | ISO/IEC 9594-3
  CommonResultsSeq, ContextSelection, EntryModification, SecurityParameters
    FROM DirectoryAbstractService directoryAbstractService
  -- from Rec. ITU-T X.518 | ISO/IEC 9594-4
  AccessPoint, dSABind
    FROM DistributedOperations distributedOperations
  -- from Rec. ITU-T X.519 | ISO/IEC 9594-5
  id-op-binding-shadow
    FROM DirectoryOperationalBindingTypes directoryOperationalBindingTypes
  shadowConsumerInitiatedAC, shadowSupplierInitiatedAC
    FROM DirectoryOSIProtocols directoryOSIProtocols
  ERROR, OPERATION, id-errcode-shadowError, id-opcode-coordinateShadowUpdate,
    id-opcode-requestShadowUpdate, id-opcode-updateShadow
    FROM CommonProtocolSpecification commonProtocolSpecification;

-- bind operation 
dSAShadowBind OPERATION ::= dSABind

-- shadow operational binding 
shadowOperationalBinding OPERATIONAL-BINDING ::= {
  AGREEMENT             ShadowingAgreementInfo
  APPLICATION CONTEXTS
    {{shadowSupplierInitiatedAC
      APPLIES TO  {All-operations-supplier-initiated}} |
      {shadowConsumerInitiatedAC
       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, -- shall 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 46.3 b) and c) of Rec. ITU-T X.680 | ISO/IEC 8824-1
-- 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{CoordinateShadowUpdateArgumentData}

CoordinateShadowUpdateArgumentData ::= [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{CoordinateShadowUpdateResultData},
  ...
}

CoordinateShadowUpdateResultData ::= [0]  SEQUENCE {
  agreementID  AgreementID,
  lastUpdate   Time OPTIONAL,
  ...,
  ...,
  COMPONENTS OF CommonResultsSeq
}

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

RequestShadowUpdateArgument ::=
  OPTIONALLY-PROTECTED{RequestShadowUpdateArgumentData}

RequestShadowUpdateArgumentData ::= [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{RequestShadowUpdateResultData},
  ...
}

RequestShadowUpdateResultData ::= [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{UpdateShadowArgumentData}

UpdateShadowArgumentData ::= [0]  SEQUENCE {
  agreementID         AgreementID,
  updateTime          Time,
  updateWindow        UpdateWindow OPTIONAL,
  updatedInfo         RefreshInformation,
  securityParameters  SecurityParameters OPTIONAL,
  ...
}

UpdateShadowResult ::= CHOICE {
  null         NULL,
  information  OPTIONALLY-PROTECTED{UpdateShadowResultData},
  ...
}

UpdateShadowResultData ::= [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{{SupportedAttributes}},
  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{{SupportedAttributes}},
            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  {ShadowErrorData}
  CODE                                id-errcode-shadowError
}

ShadowErrorData ::= SEQUENCE {
  problem       ShadowProblem,
  lastUpdate    Time OPTIONAL,
  updateWindow  UpdateWindow OPTIONAL,
  ...,
  ...,
  COMPONENTS OF CommonResultsSeq
}

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