public void ItemAdded(K key, CachableItem value, DateTime timestamp)
 {
     MserveTargetConnection.TenantSyncControl tenantSyncControl = value as MserveTargetConnection.TenantSyncControl;
     this.logSession.LogEvent(EdgeSyncLoggingLevel.Low, EdgeSyncEvent.TargetConnection, null, string.Format(CultureInfo.InvariantCulture, "TenantSyncControlCache-ItemAdded: key {0}, SyncMEUSMTPToMServ {1}, SyncMailboxSMTPToMServ {2}", new object[]
     {
         key,
         (tenantSyncControl != null) ? tenantSyncControl.SyncMEUSMTPToMServ.ToString() : "NULL",
         (tenantSyncControl != null) ? tenantSyncControl.SyncMailboxSMTPToMserv.ToString() : "NULL"
     }));
 }
        private MserveTargetConnection.TenantSyncControl GetTenantSyncControlAndUpdateCache(ADObjectId tenantCUId)
        {
            string unescapedName = tenantCUId.AncestorDN(1).Rdn.UnescapedName;

            MserveTargetConnection.TenantSyncControl tenantSyncControl = null;
            bool flag = false;

            if (!MserveTargetConnection.tenantSyncControlCache.TryGetValue(unescapedName, out tenantSyncControl, out flag) || flag)
            {
                tenantSyncControl = this.GetTenantSyncControlSettingFromAD(tenantCUId, unescapedName);
                MserveTargetConnection.tenantSyncControlCache.TryAdd(unescapedName, tenantSyncControl);
            }
            return(tenantSyncControl);
        }
        public void FilterSmtpProxyAddressesBasedOnTenantSetting(ExSearchResultEntry entry, RecipientTypeDetails recipientTypeDetail)
        {
            DirectoryAttribute directoryAttribute = null;

            if (!entry.Attributes.TryGetValue("msExchCU", out directoryAttribute))
            {
                throw new ExDirectoryException("TenantCU is missing for the user", null);
            }
            if (directoryAttribute == null || directoryAttribute.Count <= 0)
            {
                throw new ExDirectoryException("TenantCU has empty value for the user", null);
            }
            string text = directoryAttribute[0] as string;

            if (string.IsNullOrEmpty(text))
            {
                throw new ExDirectoryException("TenantCU attribute is not string value", null);
            }
            ADObjectId tenantCUId = null;

            try
            {
                tenantCUId = new ADObjectId(text);
            }
            catch (FormatException e)
            {
                throw new ExDirectoryException("TenantCU DN is of invalid format as " + text, e);
            }
            bool flag = MserveTargetConnection.IsEntryMailEnabledUser(entry, recipientTypeDetail);

            MserveTargetConnection.TenantSyncControl tenantSyncControlAndUpdateCache = this.GetTenantSyncControlAndUpdateCache(tenantCUId);
            if ((flag && !tenantSyncControlAndUpdateCache.SyncMEUSMTPToMServ) || (!flag && !tenantSyncControlAndUpdateCache.SyncMailboxSMTPToMserv))
            {
                entry.Attributes["proxyAddresses"] = new DirectoryAttribute("proxyAddresses", MserveSynchronizationProvider.EmptyList);
            }
        }