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

DirectoryShadowAbstractService {joint-iso-itu-t ds(5) module(1)
  directoryShadowAbstractService(15) 3} 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
  informationFramework, directoryOperationalBindingTypes,
    directoryAbstractService, distributedOperations, disp, opBindingManagement,
    dsaOperationalAttributeTypes, enhancedSecurity
    FROM UsefulDefinitions {joint-iso-itu-t ds(5) module(1)
      usefulDefinitions(0) 3}
  DistinguishedName, SubtreeSpecification, AttributeType,
    RelativeDistinguishedName, Attribute
    FROM InformationFramework informationFramework
  OPERATIONAL-BINDING, OperationalBindingID
    FROM OperationalBindingManagement opBindingManagement
  DSEType, SupplierAndConsumers
    FROM DSAOperationalAttributeTypes dsaOperationalAttributeTypes
  id-op-binding-shadow
    FROM DirectoryOperationalBindingTypes directoryOperationalBindingTypes
  directoryBind, directoryUnbind, EntryModification, SecurityParameters,
    CommonResults
    FROM DirectoryAbstractService directoryAbstractService
  AccessPoint
    FROM DistributedOperations distributedOperations
  OPERATION, ERROR
    FROM Remote-Operations-Information-Objects {joint-iso-itu-t
      remote-operations(4) informationObjects(5) version1(0)}
  id-opcode-requestShadowUpdate, id-opcode-updateShadow,
    id-opcode-coordinateShadowUpdate, id-errcode-shadowError,
    shadowSupplierInitiatedAC, shadowConsumerInitiatedAC,
    reliableShadowSupplierInitiatedAC, reliableShadowConsumerInitiatedAC
    FROM DirectoryInformationShadowProtocol disp
  PROTECTED{}
    FROM Notation {joint-iso-itu-t genericULS(20) modules(1) notation(1)}
  dirqop, OPTIONALLY-PROTECTED{}
    FROM EnhancedSecurity enhancedSecurity;

-- 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
}

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
UpdateWindow ::= SEQUENCE {start  Time,
                           stop   Time
}

-- shadow operations, arguments, and results 
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
    }, dirqop.&dispCoorShadowArg-QOP}

CoordinateShadowUpdateResult ::= CHOICE {
  null         NULL,
  information
    PROTECTED{SET {agreementID  AgreementID,
                   lastUpdate   Time OPTIONAL,
                   COMPONENTS OF CommonResults
      }, dirqop.&dispCoorShadowRes-QOP}
}

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
    }, dirqop.&dispUpdateShadowArg-QOP}

UpdateShadowResult ::= CHOICE {
  null         NULL,
  information
    PROTECTED{SET {agreementID  AgreementID,
                   lastUpdate   Time OPTIONAL,
                   COMPONENTS OF CommonResults
      }, dirqop.&dispUpdateShadowRes-QOP}
}

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

TotalRefresh ::= SEQUENCE {
  sDSE     SDSEContent OPTIONAL,
  subtree  SET OF Subtree OPTIONAL
}

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

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 OF SubordinateChanges OPTIONAL
}

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

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

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
    }, dirqop.&dispRequestShadowUpdateArg-QOP}

RequestShadowUpdateResult ::= CHOICE {
  null         NULL,
  information
    PROTECTED{SET {agreementID  AgreementID,
                   lastUpdate   Time OPTIONAL,
                   COMPONENTS OF CommonResults
      }, dirqop.&dispRequestShadowUpdateRes-QOP}
}

-- errors and parameters 
shadowError ERROR ::= {
  PARAMETER
    SEQUENCE {problem       ShadowProblem,
              lastUpdate    Time OPTIONAL,
              updateWindow  UpdateWindow OPTIONAL}
  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)}

All-operations-consumer-initiated OPERATION ::=
  {requestShadowUpdate | updateShadow}

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

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