public MsoMainStreamCookie ReadMostRecentCookie() { MsoMainStreamCookieContainer msoMainStreamCookieContainer = this.cookieSession.GetMsoMainStreamCookieContainer(base.ServiceInstanceName); MultiValuedProperty <byte[]> multiValuedProperty = this.RetrievePersistedCookies(msoMainStreamCookieContainer); if (multiValuedProperty.Count == 0) { return(null); } MsoMainStreamCookie msoMainStreamCookie = null; foreach (byte[] storageCookie in multiValuedProperty) { MsoMainStreamCookie msoMainStreamCookie2 = null; Exception ex = null; if (MsoMainStreamCookie.TryFromStorageCookie(storageCookie, out msoMainStreamCookie2, out ex) && string.Equals(base.ServiceInstanceName, msoMainStreamCookie2.ServiceInstanceName, StringComparison.OrdinalIgnoreCase) && (msoMainStreamCookie == null || msoMainStreamCookie.TimeStamp < msoMainStreamCookie2.TimeStamp)) { msoMainStreamCookie = msoMainStreamCookie2; } } if (msoMainStreamCookie != null) { base.SyncPropertySetVersion = msoMainStreamCookie.SyncPropertySetVersion; base.IsSyncPropertySetUpgrading = msoMainStreamCookie.IsSyncPropertySetUpgrading; return(msoMainStreamCookie); } return(null); }
public static void ConvertE14MVtoE15MV(SyncServiceInstance serviceInstance, int maxCookieHistoryCount, TimeSpan cookieHistoryInterval) { ITopologyConfigurationSession ridmasterSession = MsoCookieConverter.GetRIDMasterSession(); ridmasterSession.UseConfigNC = true; ADObjectId orgContainerId = ridmasterSession.GetOrgContainerId(); ADRawEntry adrawEntry = ridmasterSession.ReadADRawEntry(orgContainerId.Parent, MsoCookieConverter.E14MsoMainStreamCookieContainerSchema.CookieProperties); ridmasterSession.UseConfigNC = false; List <MsoMainStreamCookie> ordredCookieList = MsoCookieConverter.GetOrdredCookieList(serviceInstance.Name, adrawEntry.propertyBag[MsoCookieConverter.E14MsoMainStreamCookieContainerSchema.MsoForwardSyncNonRecipientCookie] as IEnumerable <byte[]>); List <MsoMainStreamCookie> ordredCookieList2 = MsoCookieConverter.GetOrdredCookieList(serviceInstance.Name, adrawEntry.propertyBag[MsoCookieConverter.E14MsoMainStreamCookieContainerSchema.MsoForwardSyncRecipientCookie] as IEnumerable <byte[]>); MsoCompanyMainStreamCookieManager msoCompanyMainStreamCookieManager = new MsoCompanyMainStreamCookieManager(serviceInstance.Name, maxCookieHistoryCount, cookieHistoryInterval); MsoRecipientMainStreamCookieManager msoRecipientMainStreamCookieManager = new MsoRecipientMainStreamCookieManager(serviceInstance.Name, maxCookieHistoryCount, cookieHistoryInterval); if (ordredCookieList.Count > 0) { MsoMainStreamCookie msoMainStreamCookie = ordredCookieList.Last <MsoMainStreamCookie>(); msoCompanyMainStreamCookieManager.WriteCookie(msoMainStreamCookie.RawCookie, null, msoMainStreamCookie.TimeStamp, msoMainStreamCookie.IsSyncPropertySetUpgrading, msoMainStreamCookie.SyncPropertySetVersion, true); } if (ordredCookieList2.Count > 0) { MsoMainStreamCookie msoMainStreamCookie2 = ordredCookieList2.Last <MsoMainStreamCookie>(); msoRecipientMainStreamCookieManager.WriteCookie(msoMainStreamCookie2.RawCookie, null, msoMainStreamCookie2.TimeStamp, msoMainStreamCookie2.IsSyncPropertySetUpgrading, msoMainStreamCookie2.SyncPropertySetVersion, true); } }
public MsoMainStreamCookieWithIndex(MsoMainStreamCookie cookie, int index) { if (cookie == null) { throw new ArgumentNullException("cookie"); } this.Cookie = cookie; this.Index = index; }
public override DateTime?GetMostRecentCookieTimestamp() { MsoMainStreamCookie msoMainStreamCookie = this.ReadMostRecentCookie(); if (msoMainStreamCookie != null) { return(new DateTime?(msoMainStreamCookie.TimeStamp)); } return(null); }
public override byte[] ReadCookie() { MsoMainStreamCookie msoMainStreamCookie = this.ReadMostRecentCookie(); if (msoMainStreamCookie == null) { return(null); } return(msoMainStreamCookie.RawCookie); }
public static MsoMainStreamCookie FromStorageCookie(byte[] storageCookie) { Exception ex = null; MsoMainStreamCookie result = null; if (!MsoMainStreamCookie.TryFromStorageCookie(storageCookie, out result, out ex)) { throw ex; } return(result); }
public static void ConvertE15toE14MV(SyncServiceInstance serviceInstance, int maxCookieHistoryCount, TimeSpan cookieHistoryInterval) { ITopologyConfigurationSession ridmasterSession = MsoCookieConverter.GetRIDMasterSession(); MsoMainStreamCookie cookieToAdd = null; MsoMainStreamCookie cookieToAdd2 = null; if (serviceInstance.IsMultiObjectCookieEnabled) { MsoMultiObjectCookieManager msoMultiObjectCookieManager = new MsoMultiObjectCookieManager(serviceInstance.Name, maxCookieHistoryCount, cookieHistoryInterval, ForwardSyncCookieType.CompanyIncremental); MsoMultiObjectCookieManager msoMultiObjectCookieManager2 = new MsoMultiObjectCookieManager(serviceInstance.Name, maxCookieHistoryCount, cookieHistoryInterval, ForwardSyncCookieType.RecipientIncremental); ForwardSyncCookie forwardSyncCookie = msoMultiObjectCookieManager.ReadMostRecentCookie(); ForwardSyncCookie forwardSyncCookie2 = msoMultiObjectCookieManager2.ReadMostRecentCookie(); if (forwardSyncCookie != null) { cookieToAdd = new MsoMainStreamCookie(serviceInstance.Name, forwardSyncCookie.Data, forwardSyncCookie.Timestamp, new ServerVersion(forwardSyncCookie.SyncPropertySetVersion), forwardSyncCookie.IsUpgradingSyncPropertySet); } if (forwardSyncCookie2 != null) { cookieToAdd2 = new MsoMainStreamCookie(serviceInstance.Name, forwardSyncCookie2.Data, forwardSyncCookie2.Timestamp, new ServerVersion(forwardSyncCookie2.SyncPropertySetVersion), forwardSyncCookie2.IsUpgradingSyncPropertySet); } } else { MsoCompanyMainStreamCookieManager msoCompanyMainStreamCookieManager = new MsoCompanyMainStreamCookieManager(serviceInstance.Name, maxCookieHistoryCount, cookieHistoryInterval); MsoRecipientMainStreamCookieManager msoRecipientMainStreamCookieManager = new MsoRecipientMainStreamCookieManager(serviceInstance.Name, maxCookieHistoryCount, cookieHistoryInterval); cookieToAdd = msoCompanyMainStreamCookieManager.ReadMostRecentCookie(); cookieToAdd2 = msoRecipientMainStreamCookieManager.ReadMostRecentCookie(); } ridmasterSession.UseConfigNC = true; MsoCookieConverter.E14MsoMainStreamCookieContainer[] array = ridmasterSession.Find <MsoCookieConverter.E14MsoMainStreamCookieContainer>(ridmasterSession.GetOrgContainerId().Parent, QueryScope.SubTree, null, null, 1); if (array == null || array.Length == 0) { throw new ExchangeConfigurationContainerNotFoundException(); } List <MsoMainStreamCookie> list = MsoCookieConverter.GetOrderedE14CookieList(array[0].MsoForwardSyncNonRecipientCookie); List <MsoMainStreamCookie> list2 = MsoCookieConverter.GetOrderedE14CookieList(array[0].MsoForwardSyncRecipientCookie); list = MsoCookieConverter.AddCookieToE14MVList(serviceInstance.Name, maxCookieHistoryCount, cookieHistoryInterval, cookieToAdd, list); list2 = MsoCookieConverter.AddCookieToE14MVList(serviceInstance.Name, maxCookieHistoryCount, cookieHistoryInterval, cookieToAdd2, list2); array[0].MsoForwardSyncNonRecipientCookie.Clear(); foreach (MsoMainStreamCookie msoMainStreamCookie in list) { array[0].MsoForwardSyncNonRecipientCookie.Add(msoMainStreamCookie.ToStorageCookie()); } array[0].MsoForwardSyncRecipientCookie.Clear(); foreach (MsoMainStreamCookie msoMainStreamCookie2 in list2) { array[0].MsoForwardSyncRecipientCookie.Add(msoMainStreamCookie2.ToStorageCookie()); } ridmasterSession.Save(array[0]); }
private static void FromMultiValuedCookieToMultiObjectCookie(string serviceInstanceName, IEnumerable <byte[]> multiValueCookieAttribute, MsoMultiObjectCookieManager msoMultiObjectCookieManager) { List <MsoMainStreamCookie> ordredCookieList = MsoCookieConverter.GetOrdredCookieList(serviceInstanceName, multiValueCookieAttribute); if (ordredCookieList.Count > 0) { ForwardSyncCookie forwardSyncCookie = msoMultiObjectCookieManager.ReadMostRecentCookie(); MsoMainStreamCookie msoMainStreamCookie = ordredCookieList.Last <MsoMainStreamCookie>(); if (forwardSyncCookie == null || msoMainStreamCookie.TimeStamp > forwardSyncCookie.Timestamp) { msoMultiObjectCookieManager.WriteCookie(msoMainStreamCookie.RawCookie, null, msoMainStreamCookie.TimeStamp, msoMainStreamCookie.IsSyncPropertySetUpgrading, msoMainStreamCookie.SyncPropertySetVersion, true); } } }
public override void WriteCookie(byte[] cookie, IEnumerable <string> filteredContextIds, DateTime timestamp, bool isUpgradingCookie, ServerVersion version, bool more) { if (cookie == null || cookie.Length == 0) { throw new ArgumentNullException("cookie"); } MsoMainStreamCookieContainer msoMainStreamCookieContainer = this.cookieSession.GetMsoMainStreamCookieContainer(base.ServiceInstanceName); MultiValuedProperty <byte[]> multiValuedProperty = this.RetrievePersistedCookies(msoMainStreamCookieContainer); List <MsoMainStreamCookieWithIndex> list = new List <MsoMainStreamCookieWithIndex>(); for (int i = multiValuedProperty.Count - 1; i >= 0; i--) { MsoMainStreamCookie msoMainStreamCookie = null; Exception ex = null; if (MsoMainStreamCookie.TryFromStorageCookie(multiValuedProperty[i], out msoMainStreamCookie, out ex) && string.Equals(base.ServiceInstanceName, msoMainStreamCookie.ServiceInstanceName, StringComparison.OrdinalIgnoreCase)) { list.Add(new MsoMainStreamCookieWithIndex(msoMainStreamCookie, i)); } } List <MsoMainStreamCookieWithIndex> list2 = this.SortMainStreamCookieList(list); if (list2.Count >= 2) { MsoMainStreamCookieWithIndex msoMainStreamCookieWithIndex = list2[list2.Count - 1]; MsoMainStreamCookieWithIndex msoMainStreamCookieWithIndex2 = list2[list2.Count - 2]; if (msoMainStreamCookieWithIndex.Cookie.TimeStamp < new DateTime(msoMainStreamCookieWithIndex2.Cookie.TimeStamp.Ticks + this.cookieHistoryInterval.Ticks, DateTimeKind.Utc)) { multiValuedProperty.RemoveAt(msoMainStreamCookieWithIndex.Index); } else if (list2.Count >= this.maxCookieHistoryCount) { multiValuedProperty.RemoveAt(list2[0].Index); } } base.UpdateSyncPropertySetVersion(isUpgradingCookie, version, more); MsoMainStreamCookie msoMainStreamCookie2 = new MsoMainStreamCookie(base.ServiceInstanceName, cookie, timestamp, base.SyncPropertySetVersion, base.IsSyncPropertySetUpgrading); multiValuedProperty.Add(msoMainStreamCookie2.ToStorageCookie()); this.cookieSession.Save(msoMainStreamCookieContainer); this.LogPersistCookieEvent(); }
public static bool TryFromStorageCookie(byte[] storageCookie, out MsoMainStreamCookie cookie, out Exception ex) { ex = null; cookie = null; if (storageCookie == null || storageCookie.Length == 0) { ex = new ArgumentNullException("storageCookie"); return(false); } try { string @string = Encoding.UTF8.GetString(storageCookie); string[] array = @string.Split(new string[] { MsoMainStreamCookie.Delimiter }, StringSplitOptions.None); if (array.Length != 2 && array.Length != 4 && array.Length != 6) { ex = new InvalidMainStreamCookieException(); return(false); } string serviceInstanceName = string.Empty; DateTime timeStamp = DateTime.UtcNow; ServerVersion syncPropertySetVersion = SyncPropertyDefinition.InitialSyncPropertySetVersion; bool isSyncPropertySetUpgrading = false; int num; if (array.Length == 2) { num = 1; serviceInstanceName = array[0]; } else { num = Convert.ToInt32(array[0]); serviceInstanceName = array[1]; timeStamp = DateTime.FromFileTimeUtc(long.Parse(array[2])); if (num >= MsoMainStreamCookie.Version) { syncPropertySetVersion = new ServerVersion(Convert.ToInt32(array[3])); isSyncPropertySetUpgrading = bool.Parse(array[4]); } } if (num > MsoMainStreamCookie.Version) { return(false); } byte[] rawCookie = Convert.FromBase64String(array[array.Length - 1]); cookie = new MsoMainStreamCookie(serviceInstanceName, rawCookie, timeStamp, syncPropertySetVersion, isSyncPropertySetUpgrading); } catch (DecoderFallbackException innerException) { ex = new InvalidMainStreamCookieException(innerException); return(false); } catch (ArgumentException innerException2) { ex = new InvalidMainStreamCookieException(innerException2); } catch (FormatException innerException3) { ex = new InvalidMainStreamCookieException(innerException3); return(false); } catch (OverflowException innerException4) { ex = new InvalidMainStreamCookieException(innerException4); return(false); } return(true); }
private static List <MsoMainStreamCookie> AddCookieToE14MVList(string serviceInstanceName, int maxCookieHistoryCount, TimeSpan cookieHistoryInterval, MsoMainStreamCookie cookieToAdd, List <MsoMainStreamCookie> cookies) { List <MsoMainStreamCookieWithIndex> list = new List <MsoMainStreamCookieWithIndex>(); for (int i = cookies.Count - 1; i >= 0; i--) { list.Add(new MsoMainStreamCookieWithIndex(cookies[i], i)); } List <MsoMainStreamCookieWithIndex> list2 = MsoCookieConverter.SortMainStreamCookieList(list); if (list2.Count >= 2) { MsoMainStreamCookieWithIndex msoMainStreamCookieWithIndex = list2[list2.Count - 1]; MsoMainStreamCookieWithIndex msoMainStreamCookieWithIndex2 = list2[list2.Count - 2]; if (msoMainStreamCookieWithIndex.Cookie.TimeStamp < new DateTime(msoMainStreamCookieWithIndex2.Cookie.TimeStamp.Ticks + cookieHistoryInterval.Ticks, DateTimeKind.Utc)) { cookies.RemoveAt(msoMainStreamCookieWithIndex.Index); } else if (list2.Count >= maxCookieHistoryCount) { cookies.RemoveAt(list2[0].Index); } } if (cookieToAdd != null) { cookies.Add(cookieToAdd); } return(cookies); }