internal void RefreshUserSettings(CultureInfo userCulture, EcpUserSettings userSettings)
 {
     if (userCulture != null)
     {
         this.userCulture = userCulture;
         Culture.InternalSetThreadPreferredCulture(userCulture);
     }
     this.RefreshMailboxSession(userSettings);
     this.ClearBposShellData();
 }
 private void RefreshMailboxSession(EcpUserSettings userSettings)
 {
     base.UserContextDiposeGraph.Append(".ur1");
     if ((userSettings & EcpUserSettings.Regional) == EcpUserSettings.Regional)
     {
         ExTimeZone exTimeZone = null;
         try
         {
             if (this.mailboxSessionLock.LockWriterElastic(3000))
             {
                 base.UserContextDiposeGraph.Append(".ur2");
                 if (base.NotificationManager != null)
                 {
                     base.UserContextDiposeGraph.Append(".ur3");
                     base.NotificationManager.CleanupSubscriptions();
                 }
                 if (this.mailboxSession != null)
                 {
                     base.UserContextDiposeGraph.Append(".ur4");
                     base.DisposeMailboxSession();
                 }
                 this.mailboxSession          = this.CreateMailboxSession();
                 this.isMailboxSessionCreated = true;
                 UserContextUtilities.ReconnectStoreSession(this.mailboxSession, this);
                 exTimeZone = TimeZoneHelper.GetUserTimeZone(this.mailboxSession);
             }
         }
         finally
         {
             if (this.mailboxSessionLock.IsWriterLockHeld)
             {
                 if (this.mailboxSession != null)
                 {
                     base.UserContextDiposeGraph.Append(".ur5");
                     base.UnlockAndDisconnectMailboxSession();
                 }
                 else
                 {
                     base.UserContextDiposeGraph.Append(".ur6");
                     this.mailboxSessionLock.ReleaseWriterLock();
                 }
             }
         }
         if (exTimeZone != null && base.NotificationManager != null)
         {
             base.NotificationManager.RefreshSubscriptions(exTimeZone);
         }
     }
     base.UserContextDiposeGraph.Append(".ur7");
 }
        private static DispatchStepResult ValidateAndSetThreadCulture(RequestContext requestContext)
        {
            ExTraceGlobals.CoreCallTracer.TraceDebug(0L, "[RequestDispatcher::ValidateAndSetThreadCulture] entry.");
            CultureInfo     cultureInfo     = null;
            EcpUserSettings ecpUserSettings = (EcpUserSettings)0U;
            UserContext     userContext     = requestContext.UserContext as UserContext;

            if (requestContext.UserContext != null && userContext == null)
            {
                throw new OwaInvalidOperationException(string.Format("Context was expected to be of type UserContext, but it is of type {0}", requestContext.UserContext.GetType()));
            }
            if (RequestDispatcherUtilities.TryReadUpdatedUserSettingsCookie(requestContext, out ecpUserSettings))
            {
                cultureInfo = RequestDispatcherUtilities.GetUserCultureFromEcpCookie(requestContext, ecpUserSettings);
                if (userContext != null)
                {
                    userContext.RefreshUserSettings(cultureInfo, ecpUserSettings);
                }
                RequestDispatcherUtilities.DeleteUserSettingsCookie(requestContext);
            }
            if (cultureInfo == null)
            {
                bool flag = requestContext.RequestType == OwaRequestType.SuiteServiceProxyPage;
                if (requestContext.LanguagePostUserCulture != null)
                {
                    cultureInfo = requestContext.LanguagePostUserCulture;
                }
                else if (userContext != null && !flag)
                {
                    cultureInfo = Culture.GetPreferredCultureInfo(userContext.ExchangePrincipal);
                    if (cultureInfo == null && userContext.IsExplicitLogon)
                    {
                        cultureInfo             = ClientCultures.GetPreferredCultureInfo(userContext.LogonIdentity.GetOWAMiniRecipient().Languages);
                        userContext.UserCulture = cultureInfo;
                    }
                    if (cultureInfo == null)
                    {
                        if (string.IsNullOrEmpty(requestContext.DestinationUrlQueryString))
                        {
                            requestContext.DestinationUrlQueryString = requestContext.HttpContext.Request.QueryString.ToString();
                        }
                        bool        flag2 = string.IsNullOrEmpty(requestContext.HttpContext.Request.Headers["X-SuiteServiceProxyOrigin"]);
                        CultureInfo culture;
                        string      timeZoneKeyName;
                        if (OfflineClientRequestUtilities.IsRequestFromMOWAClient(requestContext.HttpContext.Request, requestContext.HttpContext.Request.UserAgent) && RequestDispatcherUtilities.TryReadMowaGlobalizationSettings(requestContext, out culture, out timeZoneKeyName))
                        {
                            return(RequestDispatcher.HandleLanguagePost(requestContext, culture, timeZoneKeyName, false, requestContext.DestinationUrl));
                        }
                        if (flag2)
                        {
                            requestContext.DestinationUrl = RequestDispatcherUtilities.GetDestinationForRedirectToLanguagePage(requestContext);
                            requestContext.HttpContext.Response.AppendHeader("X-OWA-Version", Globals.ApplicationVersion);
                            requestContext.HttpContext.Response.AppendToLog("&redir=lang");
                            return(DispatchStepResult.RedirectToUrl);
                        }
                        requestContext.HttpContext.Response.Headers["X-OWA-Error"] = "OwaInvalidUserLanguageException";
                        requestContext.HttpStatusCode = HttpStatusCode.NoContent;
                        return(DispatchStepResult.EndResponse);
                    }
                    else if (userContext.IsUserCultureExplicitlySet)
                    {
                        cultureInfo = userContext.UserCulture;
                    }
                }
            }
            if (cultureInfo != null)
            {
                Culture.InternalSetThreadPreferredCulture(cultureInfo);
            }
            else
            {
                Culture.InternalSetThreadPreferredCulture();
            }
            return(DispatchStepResult.Continue);
        }
        internal static CultureInfo GetUserCultureFromEcpCookie(RequestContext requestContext, EcpUserSettings settingToReload)
        {
            CultureInfo cultureInfo = null;

            if (UserContextUtilities.IsFlagSet((int)settingToReload, 32))
            {
                HttpCookie httpCookie = HttpContext.Current.Request.Cookies["mkt"];
                if (httpCookie != null && !string.IsNullOrEmpty(httpCookie.Value))
                {
                    CultureInfo cultureInfo2 = CultureInfo.GetCultureInfo(httpCookie.Value);
                    if (ClientCultures.IsSupportedCulture(cultureInfo2))
                    {
                        cultureInfo = cultureInfo2;
                    }
                }
                if (cultureInfo == null)
                {
                    ExTraceGlobals.UserContextCallTracer.TraceDebug(0L, "UserContext.ReloadUserSettings: The culture cookie doesn't have a valid value.");
                }
            }
            return(cultureInfo);
        }
        internal static bool TryReadUpdatedUserSettingsCookie(RequestContext requestContext, out EcpUserSettings settings)
        {
            settings = (EcpUserSettings)0U;
            HttpCookie httpCookie = requestContext.HttpContext.Request.Cookies["UpdatedUserSettings"];

            if (httpCookie == null)
            {
                return(false);
            }
            string value = httpCookie.Value;
            bool   result;

            try
            {
                settings = (EcpUserSettings)Convert.ToUInt32(value);
                result   = true;
            }
            catch (FormatException)
            {
                throw new OwaInvalidRequestException(string.Format(CultureInfo.InvariantCulture, "The value of the cookie {0} is invalid.", new object[]
                {
                    "UpdatedUserSettings"
                }));
            }
            catch (OverflowException)
            {
                throw new OwaInvalidRequestException(string.Format(CultureInfo.InvariantCulture, "The value of the cookie {0} is invalid.", new object[]
                {
                    "UpdatedUserSettings"
                }));
            }
            return(result);
        }