// Token: 0x060061E2 RID: 25058 RVA: 0x0014E6C0 File Offset: 0x0014C8C0
        public static BackSyncCookie Parse(byte[] binaryCookie)
        {
            if (binaryCookie == null)
            {
                ExTraceGlobals.BackSyncTracer.TraceError((long)SyncConfiguration.TraceId, "BackSyncCookie.Parse input binaryCookie is NULL");
                throw new ArgumentNullException("binaryCookie");
            }
            ExTraceGlobals.BackSyncTracer.TraceDebug <string>((long)SyncConfiguration.TraceId, "BackSyncCookie.Parse Read BackSync binary cookie \"{0}\"", Convert.ToBase64String(binaryCookie));
            Exception ex2;

            try
            {
                using (BackSyncCookieReader backSyncCookieReader = BackSyncCookieReader.Create(binaryCookie, typeof(BackSyncCookie)))
                {
                    int num = (int)backSyncCookieReader.GetNextAttributeValue();
                    ServiceInstanceId serviceInstanceId = new ServiceInstanceId((string)backSyncCookieReader.GetNextAttributeValue());
                    long   dateData     = (long)backSyncCookieReader.GetNextAttributeValue();
                    long   dateData2    = (long)backSyncCookieReader.GetNextAttributeValue();
                    Guid   invocationId = (Guid)backSyncCookieReader.GetNextAttributeValue();
                    bool   moreData     = (bool)backSyncCookieReader.GetNextAttributeValue();
                    byte[] array        = (byte[])backSyncCookieReader.GetNextAttributeValue();
                    if (array != null)
                    {
                        ADDirSyncCookie.Parse(array);
                    }
                    string[] errorObjects = (string[])backSyncCookieReader.GetNextAttributeValue();
                    Dictionary <string, int> errorObjects2 = BackSyncCookie.ParseErrorObjectsAndFailureCounts(errorObjects);
                    long   dateData3 = (long)backSyncCookieReader.GetNextAttributeValue();
                    byte[] lastDirSyncCookieWithReplicationVectors = (byte[])backSyncCookieReader.GetNextAttributeValue();
                    long   dateData4  = (long)backSyncCookieReader.GetNextAttributeValue();
                    Guid   sequenceId = (Guid)backSyncCookieReader.GetNextAttributeValue();
                    return(new BackSyncCookie(DateTime.FromBinary(dateData), DateTime.FromBinary(dateData2), DateTime.FromBinary(dateData3), invocationId, moreData, array, errorObjects2, lastDirSyncCookieWithReplicationVectors, serviceInstanceId, sequenceId, DateTime.FromBinary(dateData4)));
                }
            }
            catch (ArgumentException ex)
            {
                ExTraceGlobals.BackSyncTracer.TraceError <string>((long)SyncConfiguration.TraceId, "BackSyncCookie.Parse ArgumentException {0}", ex.ToString());
                ex2 = ex;
            }
            catch (IOException ex3)
            {
                ExTraceGlobals.BackSyncTracer.TraceError <string>((long)SyncConfiguration.TraceId, "BackSyncCookie.Parse IOException {0}", ex3.ToString());
                ex2 = ex3;
            }
            catch (FormatException ex4)
            {
                ExTraceGlobals.BackSyncTracer.TraceError <string>((long)SyncConfiguration.TraceId, "BackSyncCookie.Parse FormatException {0}", ex4.ToString());
                ex2 = ex4;
            }
            ExTraceGlobals.BackSyncTracer.TraceError <string>((long)SyncConfiguration.TraceId, "BackSyncCookie.Parse throw InvalidCookieException {0}", ex2.ToString());
            throw new InvalidCookieException(ex2);
        }
Esempio n. 2
0
 private MergePageToken(MergeState mergeState, byte[] tenantFullSyncPageTokenBytes, byte[] incrementalSyncCookieBytes, Dictionary <string, int> errorObjectsAndFailureCounts) : base(tenantFullSyncPageTokenBytes)
 {
     ExTraceGlobals.MergeTracer.TraceDebug((long)base.TenantExternalDirectoryId.GetHashCode(), "New MergePageToken");
     this.MergeState = mergeState;
     ExTraceGlobals.MergeTracer.TraceDebug <string>((long)base.TenantExternalDirectoryId.GetHashCode(), "MergePageToken this.MergeState = {0}", this.MergeState.ToString());
     this.BackSyncCookie = BackSyncCookie.Parse(incrementalSyncCookieBytes);
     if (!this.BackSyncCookie.ServiceInstanceId.Equals(base.ServiceInstanceId))
     {
         ExTraceGlobals.MergeTracer.TraceError((long)base.TenantExternalDirectoryId.GetHashCode(), "MergePageToken serviceInstanceId != tenantFullSyncPageTokenBytes.ServiceInstanceId");
         throw new InvalidCookieException(new ArgumentException("serviceInstanceId"));
     }
     this.MergeVersion = 2;
     ExTraceGlobals.MergeTracer.TraceDebug <int>((long)base.TenantExternalDirectoryId.GetHashCode(), "MergePageToken this.MergeVersion = {0}", this.MergeVersion);
     this.dirSyncCookie = ADDirSyncCookie.Parse(this.BackSyncCookie.DirSyncCookie);
     base.ErrorObjectsAndFailureCounts = (errorObjectsAndFailureCounts ?? new Dictionary <string, int>());
     if (!this.BackSyncCookie.ReadyToMerge || this.dirSyncCookie.MoreData)
     {
         ExTraceGlobals.MergeTracer.TraceError((long)base.TenantExternalDirectoryId.GetHashCode(), "MergePageToken !this.BackSyncCookie.ReadyToMerge || dirSyncCookie.MoreData");
         throw new InvalidCookieException(new ArgumentException("incrementalSyncCookieBytes"));
     }
 }
 internal void FinishFullSync()
 {
     ExTraceGlobals.TenantFullSyncTracer.TraceDebug((long)this.TenantExternalDirectoryId.GetHashCode(), "TenantFullSyncPageToken.FinishFullSync entering");
     ExTraceGlobals.TenantFullSyncTracer.TraceDebug <string>((long)this.TenantExternalDirectoryId.GetHashCode(), "TenantFullSyncPageToken.FinishFullSync this.State = {0}", this.State.ToString());
     if (this.TenantScopedBackSyncCookie == null && this.State != TenantFullSyncState.EnumerateDeletedObjects)
     {
         ExTraceGlobals.TenantFullSyncTracer.TraceError <TenantFullSyncState>((long)this.TenantExternalDirectoryId.GetHashCode(), "this.State != TenantFullSyncState.EnumerateDeletedObjects. State: {0}", this.State);
         throw new InvalidOperationException("State");
     }
     if (this.TenantScopedBackSyncCookie != null && this.State != TenantFullSyncState.EnumerateLiveObjects && this.State != TenantFullSyncState.EnumerateDeletedObjects)
     {
         ExTraceGlobals.TenantFullSyncTracer.TraceError <TenantFullSyncState>((long)this.TenantExternalDirectoryId.GetHashCode(), "this.State != TenantFullSyncState.EnumerateLiveObjects and EnumerateDeletedObjects. State: {0}", this.State);
         throw new InvalidOperationException("State");
     }
     this.CheckLinkPropertiesAreEmpty();
     if (this.TenantScopedBackSyncCookie == null)
     {
         if (this.PendingWatermarks == null)
         {
             ExTraceGlobals.TenantFullSyncTracer.TraceError((long)this.TenantExternalDirectoryId.GetHashCode(), "this.PendingWatermarks == null");
             throw new InvalidOperationException("PendingWatermarks");
         }
         if (this.PendingWatermarksInvocationId == Guid.Empty)
         {
             ExTraceGlobals.TenantFullSyncTracer.TraceError((long)this.TenantExternalDirectoryId.GetHashCode(), "this.PendingWatermarksInvocationId == Guid.Empty");
             throw new InvalidOperationException("PendingWatermarksInvocationId");
         }
         this.WatermarksInvocationId        = this.PendingWatermarksInvocationId;
         this.PendingWatermarksInvocationId = Guid.Empty;
         this.Watermarks        = this.PendingWatermarks;
         this.PendingWatermarks = null;
     }
     else
     {
         if (this.TenantScopedBackSyncCookie.MoreDirSyncData)
         {
             ExTraceGlobals.TenantFullSyncTracer.TraceError((long)this.TenantExternalDirectoryId.GetHashCode(), "this.TenantScopedBackSyncCookie.MoreDirSyncData == true");
             throw new InvalidOperationException("TenantScopedBackSyncCookie.MoreDirSyncData");
         }
         ADDirSyncCookie addirSyncCookie = ADDirSyncCookie.Parse(this.TenantScopedBackSyncCookie.DirSyncCookie);
         if (addirSyncCookie.Cursors == null || addirSyncCookie.Cursors.Count == 0)
         {
             ExTraceGlobals.TenantFullSyncTracer.TraceError((long)this.TenantExternalDirectoryId.GetHashCode(), "latestDirSyncCookie.Cursors is null or empty");
             throw new InvalidOperationException("latestDirSyncCookie.Cursors");
         }
         this.WatermarksInvocationId = this.TenantScopedBackSyncCookie.InvocationId;
         this.Watermarks             = new WatermarkMap();
         foreach (ReplicationCursor replicationCursor in addirSyncCookie.Cursors)
         {
             this.Watermarks[replicationCursor.SourceInvocationId] = replicationCursor.UpToDatenessUsn;
         }
     }
     this.State = TenantFullSyncState.Complete;
     ExTraceGlobals.TenantFullSyncTracer.TraceDebug((long)this.TenantExternalDirectoryId.GetHashCode(), "Tenant full sync for {0} on {1}({2}) is complete. Watermarks stored: {3}", new object[]
     {
         this.TenantExternalDirectoryId,
         this.InvocationId,
         this.InvocationId,
         this.Watermarks.SerializeToString()
     });
 }