private IThrottlingPolicy GetParentThrottlingPolicyFromAD(ThrottlingPolicy policy)
        {
            IThrottlingPolicy result;

            switch (this.ThrottlingPolicy.ThrottlingPolicyScope)
            {
            case ThrottlingPolicyScopeType.Regular:
            {
                ThrottlingPolicy throttlingPolicy = EffectiveThrottlingPolicy.ReadOrganizationThrottlingPolicyFromAD(policy.OrganizationId);
                if (throttlingPolicy == null)
                {
                    throttlingPolicy = EffectiveThrottlingPolicy.ReadGlobalThrottlingPolicyFromAD();
                }
                result = throttlingPolicy.GetEffectiveThrottlingPolicy(false);
                break;
            }

            case ThrottlingPolicyScopeType.Organization:
                result = EffectiveThrottlingPolicy.ReadGlobalThrottlingPolicyFromAD().GetEffectiveThrottlingPolicy(false);
                break;

            case ThrottlingPolicyScopeType.Global:
                result = FallbackThrottlingPolicy.GetSingleton();
                break;

            default:
                throw new NotSupportedException(string.Format("Unsupported enum value {0}.", this.ThrottlingPolicy.ThrottlingPolicyScope));
            }
            return(result);
        }
        // Token: 0x060072B9 RID: 29369 RVA: 0x0017BC24 File Offset: 0x00179E24
        internal override IThrottlingPolicy InternalLookup()
        {
            ExchangeConfigurationUnit cu = null;
            ADOperationResult         adoperationResult = ADNotificationAdapter.TryRunADOperation(delegate()
            {
                PartitionId partitionIdByAcceptedDomainName = ADAccountPartitionLocator.GetPartitionIdByAcceptedDomainName(this.principal.DelegatedOrganization);
                if (partitionIdByAcceptedDomainName != null)
                {
                    ADSessionSettings sessionSettings = ADSessionSettings.FromAllTenantsPartitionId(partitionIdByAcceptedDomainName);
                    ITenantConfigurationSession tenantConfigurationSession           = DirectorySessionFactory.Default.CreateTenantConfigurationSession(ConsistencyMode.PartiallyConsistent, sessionSettings, 86, "InternalLookup", "f:\\15.00.1497\\sources\\dev\\data\\src\\directory\\throttling\\DelegatedPrincipalBudgetKey.cs");
                    tenantConfigurationSession.SessionSettings.IsSharedConfigChecked = true;
                    cu = tenantConfigurationSession.GetExchangeConfigurationUnitByNameOrAcceptedDomain(this.principal.DelegatedOrganization);
                }
                if (cu == null)
                {
                    throw new CannotResolveTenantNameException(DirectoryStrings.CannotResolveTenantNameByAcceptedDomain(this.principal.DelegatedOrganization));
                }
            });

            if (!adoperationResult.Succeeded)
            {
                ExTraceGlobals.ClientThrottlingTracer.TraceError <string, string, Exception>((long)this.GetHashCode(), "[DelegatedPrincipalBudgetKey.Lookup] Failed to find Delegated Organization: '{0}' for user '{1}', using global throttling policy.  Exception: '{2}'", this.principal.DelegatedOrganization, this.principal.UserId, adoperationResult.Exception);
                return(ThrottlingPolicyCache.Singleton.GetGlobalThrottlingPolicy());
            }
            OrganizationId orgId = cu.OrganizationId;

            if (cu.SupportedSharedConfigurations.Count > 0)
            {
                SharedConfiguration sharedConfig = null;
                adoperationResult = ADNotificationAdapter.TryRunADOperation(delegate()
                {
                    sharedConfig = SharedConfiguration.GetSharedConfiguration(cu.OrganizationId);
                });
                if (!adoperationResult.Succeeded)
                {
                    ExTraceGlobals.ClientThrottlingTracer.TraceError <OrganizationId, Exception>((long)this.GetHashCode(), "[DelegatedPrincipalBudgetKey.Lookup] Failed to get Shared Configuration Organization: '{0}', using global throttling policy.  Exception: '{1}'", cu.OrganizationId, adoperationResult.Exception);
                    return(ThrottlingPolicyCache.Singleton.GetGlobalThrottlingPolicy());
                }
                if (sharedConfig != null)
                {
                    orgId = sharedConfig.SharedConfigId;
                }
            }
            return(base.ADRetryLookup(delegate
            {
                ADSessionSettings sessionSettings = ADSessionSettings.FromAllTenantsOrRootOrgAutoDetect(orgId);
                IConfigurationSession tenantOrTopologyConfigurationSession = DirectorySessionFactory.Default.GetTenantOrTopologyConfigurationSession(true, ConsistencyMode.IgnoreInvalid, sessionSettings, 149, "InternalLookup", "f:\\15.00.1497\\sources\\dev\\data\\src\\directory\\throttling\\DelegatedPrincipalBudgetKey.cs");
                tenantOrTopologyConfigurationSession.SessionSettings.IsSharedConfigChecked = true;
                ThrottlingPolicy organizationThrottlingPolicy = tenantOrTopologyConfigurationSession.GetOrganizationThrottlingPolicy(orgId, false);
                if (organizationThrottlingPolicy == null)
                {
                    ExTraceGlobals.ClientThrottlingTracer.TraceError <string, string>((long)this.GetHashCode(), "[DelegatedPrincipalBudgetKey.Lookup] Failed to find Default Throttling Policy for '{0}\\{1}', using global throttling policy", this.principal.DelegatedOrganization, this.principal.UserId);
                    return ThrottlingPolicyCache.Singleton.GetGlobalThrottlingPolicy();
                }
                return organizationThrottlingPolicy.GetEffectiveThrottlingPolicy(true);
            }));
        }
            private IThrottlingPolicy ResolveGlobalThrottlingPolicy()
            {
                ThrottlingPolicy throttlingPolicy = null;

                if (!this.disposed)
                {
                    throttlingPolicy = ThrottlingPolicyCache.ReadThrottlingPolicyFromAD(this.session, null, (IConfigurationSession session1, object id) => ((ITopologyConfigurationSession)session1).GetGlobalThrottlingPolicy());
                }
                if (throttlingPolicy != null)
                {
                    return(throttlingPolicy.GetEffectiveThrottlingPolicy(false));
                }
                return(FallbackThrottlingPolicy.GetSingleton());
            }
        private static CachableThrottlingPolicyItem ResolveThrottlingPolicy(object obj, OrgAndObjectId orgAndObjectId)
        {
            ThrottlingPolicy throttlingPolicy = null;

            if (orgAndObjectId.Id.IsDeleted)
            {
                Globals.LogEvent(DirectoryEventLogConstants.Tuple_DeletedThrottlingPolicyReferenced, orgAndObjectId.ToString(), new object[]
                {
                    orgAndObjectId
                });
            }
            else
            {
                throttlingPolicy = ThrottlingPolicyCache.ReadThrottlingPolicyFromAD(ThrottlingPolicyCache.GetSession(orgAndObjectId.OrganizationId), orgAndObjectId.Id, (IConfigurationSession session1, object id) => session1.Read <ThrottlingPolicy>((ADObjectId)id));
            }
            return(new CachableThrottlingPolicyItem((throttlingPolicy == null) ? ThrottlingPolicyCache.Singleton.Get(orgAndObjectId.OrganizationId) : throttlingPolicy.GetEffectiveThrottlingPolicy(true)));
        }
        private static CachableThrottlingPolicyItem ResolveOrganizationThrottlingPolicy(object obj, OrganizationId organizationId)
        {
            SharedConfiguration sharedConfiguration = SharedConfiguration.GetSharedConfiguration(organizationId);

            if (sharedConfiguration != null)
            {
                organizationId = sharedConfiguration.SharedConfigId;
            }
            ThrottlingPolicy throttlingPolicy = ThrottlingPolicyCache.ReadThrottlingPolicyFromAD(ThrottlingPolicyCache.GetSession(organizationId), organizationId, (IConfigurationSession session1, object id) => session1.GetOrganizationThrottlingPolicy((OrganizationId)id));

            return(new CachableThrottlingPolicyItem((throttlingPolicy == null) ? ThrottlingPolicyCache.Singleton.GetGlobalThrottlingPolicy() : throttlingPolicy.GetEffectiveThrottlingPolicy(true)));
        }