4.1.10.6.4 PrepareCrossNCMove

 procedure PrepareCrossNCMove(
   replEntinfList: REPLENTINFLIST,
   sourcePrefixTable: PrefixTable): boolean

Informative summary of behavior: The PrepareCrossNCMove procedure determines whether the object specified by the replEntinfList argument is being moved from one NC to another and, if so, performs preparatory work and/or terminates further processing of replEntinfList. The procedure returns true if further processing of replicated update in replEntinfList has to be performed. Otherwise, it returns false.

  
 proxiedNameAttrVal: ATTRVAL
 proxiedNameValue: DNBinary 
 localProxiedNameValue: DNBinary
 proxyEpoch: DWORD
 localProxyEpoch: DWORD
 proxyObject: DSName
 proxyObjectNameValue: DNBinary
 isProxy: boolean
 objClassVal: ATTRVAL
  
  
 proxiedNameAttrVal := ENTINF_GetValue(
                         replEntinfList.Entinf, 
                         proxiedObjectName,
                         sourcePrefixTable)
 if (proxiedNameAttrVal = null) then
   /* Update is not related to cross NC move. Therefore, continue  
      processing the replicated update. */
   return true 
 endif
  
  
 /* replEntinfList corresponds to an object that has moved across an
  * NC /
 proxiedNameValue := ValueFromATTRVAL(
     proxiedNameAttrVal, Syntax(proxiedObjectName), sourcePrefixTable)
 proxyEpoch := GetProxyEpoch(proxiedNameValue)
  
  
 /* Check whether the objectClass is infrastructureUpdate. */
 objClassVal := ENTINF_GetValue(replEntinfList.Entinf, objectClass,
     sourcePrefixTable)
 if LocalAttidFromRemoteAttid(
     sourcePrefixTable, objClassVal.pAVal^.pVal^)
     = infrastructureUpdate then
   isProxy := true
 else
   isProxy := false
 endif
  
  
 if not isProxy then 
   /* Replicated update is not for an infrastructureUpdate object. */
   proxyObject := replEntinfList.Entinf.pName^
   if (ObjExists(proxyObject)) and 
      (not proxyObject!proxiedObjectName = null) then
     localProxyEpoch := GetProxyEpoch(proxyObject!proxiedObjectName)
   else
     localProxyEpoch := 0
   endif
   if (localProxyEpoch > proxyEpoch) then
     /* Local EPOCH value is higher. Don't continue processing the
      * replicated update. */
     return false
   else if (localProxyEpoch < proxyEpoch) and
           (ObjExists(proxyObject)) then
     Expunge(proxyObject)
   endif
 else
   proxyObjectNameValue :=
       ValueFromATTRVAL(proxiedNameAttrVal.pVal,
                        Syntax(proxiedObjectName),
                        sourcePrefixTable)
   proxyObject := proxyObjectNameValue.dn
   if (ObjExists(proxyObject)) then 
     localProxiedNameValue = proxyObject!proxiedObjectName
     if (localProxiedNameValue = null) then
       localProxyEpoch := 0
     else
       localProxyEpoch := GetProxyEpoch(localProxiedNameValue)
     endif
     if (localProxyEpoch < proxyEpoch) then
       Expunge(proxyObject)
     endif
   endif
 endif  
 return true /* Continue processing the replicated update. */
Show: