Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 3
0
 public MsoMainStreamCookieWithIndex(MsoMainStreamCookie cookie, int index)
 {
     if (cookie == null)
     {
         throw new ArgumentNullException("cookie");
     }
     this.Cookie = cookie;
     this.Index  = index;
 }
Exemplo n.º 4
0
        public override DateTime?GetMostRecentCookieTimestamp()
        {
            MsoMainStreamCookie msoMainStreamCookie = this.ReadMostRecentCookie();

            if (msoMainStreamCookie != null)
            {
                return(new DateTime?(msoMainStreamCookie.TimeStamp));
            }
            return(null);
        }
Exemplo n.º 5
0
        public override byte[] ReadCookie()
        {
            MsoMainStreamCookie msoMainStreamCookie = this.ReadMostRecentCookie();

            if (msoMainStreamCookie == null)
            {
                return(null);
            }
            return(msoMainStreamCookie.RawCookie);
        }
Exemplo n.º 6
0
        public static MsoMainStreamCookie FromStorageCookie(byte[] storageCookie)
        {
            Exception           ex     = null;
            MsoMainStreamCookie result = null;

            if (!MsoMainStreamCookie.TryFromStorageCookie(storageCookie, out result, out ex))
            {
                throw ex;
            }
            return(result);
        }
Exemplo n.º 7
0
        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]);
        }
Exemplo n.º 8
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);
                }
            }
        }
Exemplo n.º 9
0
        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();
        }
Exemplo n.º 10
0
 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);
 }
Exemplo n.º 11
0
        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);
        }