public static SyncCookie FromBytes(byte[] cookieData) { Exception ex = null; SyncCookie result = null; if (!SyncCookie.TryFromBytes(cookieData, out result, out ex)) { throw ex; } return(result); }
public static SyncCookie ResolveSyncCookie(byte[] cookieData, IDirectorySession session, Task.TaskVerboseLoggingDelegate writeVerbose, Task.TaskErrorLoggingDelegate writeError) { if (session == null) { throw new ArgumentNullException("session"); } string text = SyncTaskHelper.GetCurrentServerFromSession(session); ITopologyConfigurationSession topologyConfigurationSession = DirectorySessionFactory.Default.CreateTopologyConfigurationSession(text, true, ConsistencyMode.IgnoreInvalid, ADSessionSettings.FromRootOrgScopeSet(), 84, "ResolveSyncCookie", "f:\\15.00.1497\\sources\\dev\\Management\\src\\Management\\Common\\recipient\\SyncTaskHelper.cs"); Guid guid = topologyConfigurationSession.GetInvocationIdByFqdn(text); writeVerbose(Strings.VerboseSyncTaskDomainControllerToUse(text, guid)); if (cookieData == null) { writeVerbose(SyncTaskHelper.FormatCookieVerboseString(null)); SyncCookie syncCookie = new SyncCookie(guid, WatermarkMap.Empty, SyncConfiguration.GetReplicationCursors(topologyConfigurationSession), null); writeVerbose(Strings.VerboseSyncTaskHighestCommittedUSN(text, syncCookie.HighWatermark)); return(syncCookie); } SyncCookie syncCookie2 = null; Exception exception = null; if (!SyncCookie.TryFromBytes(cookieData, out syncCookie2, out exception)) { writeError(exception, ErrorCategory.InvalidData, null); } writeVerbose(SyncTaskHelper.FormatCookieVerboseString(syncCookie2)); if (syncCookie2.DomainController != guid) { writeVerbose(Strings.VerboseSyncTaskDomainControllerMismatch(syncCookie2.DomainController, guid)); ADServer adserver = topologyConfigurationSession.FindDCByFqdn(text); if (syncCookie2.PageCookie != null) { writeVerbose(Strings.VerboseSyncTaskCookieHasPageData(syncCookie2.DomainController, guid)); string text2 = SyncTaskHelper.FindAvailableServerByInvocationId(syncCookie2.DomainController, topologyConfigurationSession, adserver.Site); if (text2 != null) { session.DomainController = text2; writeVerbose(Strings.VerboseSyncTaskHighestCommittedUSN(text2, syncCookie2.HighWatermark)); return(syncCookie2); } writeError(new PageCookieInterruptedException(), ErrorCategory.InvalidData, null); } if (!syncCookie2.LowWatermarks.ContainsKey(guid)) { writeVerbose(Strings.VerboseSyncTaskCookieCurrentWatermarksMissingCurrentDC(syncCookie2.DomainController, guid)); string text3 = SyncTaskHelper.FindAvailableServerByInvocationId(syncCookie2.DomainController, topologyConfigurationSession, adserver.Site); if (text3 != null) { session.DomainController = text3; topologyConfigurationSession.DomainController = text3; text = text3; guid = syncCookie2.DomainController; } else { writeVerbose(Strings.VerboseSyncTaskCookieOriginatingDCNotAvailable(syncCookie2.DomainController)); Guid guid2; string text4 = SyncTaskHelper.FindAvailableServerFromWatermarks(syncCookie2.LowWatermarks, topologyConfigurationSession, adserver.Site, out guid2); if (text4 != null) { session.DomainController = text4; topologyConfigurationSession.DomainController = text4; text = text4; guid = guid2; } else { writeError(new CookieExpiredException(syncCookie2.DomainController, guid), ErrorCategory.InvalidData, null); } } } } WatermarkMap lowWatermarks = SyncTaskHelper.FallbackWatermarks(syncCookie2.LowWatermarks, syncCookie2.DomainController, guid); WatermarkMap highWatermarks = SyncTaskHelper.FallbackWatermarks(syncCookie2.HighWatermarks, syncCookie2.DomainController, guid); if (syncCookie2.HighWatermark == 0L) { syncCookie2 = new SyncCookie(guid, lowWatermarks, SyncConfiguration.GetReplicationCursors(topologyConfigurationSession), null); } else { syncCookie2 = new SyncCookie(guid, lowWatermarks, highWatermarks, syncCookie2.PageCookie); } writeVerbose(Strings.VerboseSyncTaskHighestCommittedUSN(text, syncCookie2.HighWatermark)); return(syncCookie2); }