Exemple #1
0
        public static AnchorMailbox TryCreateFromRoutingHint(IRequestContext requestContext, bool tryTargetServerRoutingHint)
        {
            if (requestContext == null)
            {
                throw new ArgumentNullException("requestContext");
            }
            string text = requestContext.HttpContext.Request.Headers[WellKnownHeader.XTargetServer];

            if (!string.IsNullOrEmpty(text) && tryTargetServerRoutingHint)
            {
                requestContext.Logger.Set(HttpProxyMetadata.RoutingHint, "TargetServerHeader");
                return(new ServerInfoAnchorMailbox(text, requestContext));
            }
            string text2 = requestContext.HttpContext.Request.Headers[Constants.AnchorMailboxHeaderName];

            if (string.IsNullOrEmpty(text2))
            {
                return(null);
            }
            Match match = RegexUtilities.TryMatch(Constants.SidRegex, text2, requestContext.Logger);

            if (match != null && match.Success)
            {
                string text3 = RegexUtilities.ParseIdentifier(match, "${sid}", requestContext.Logger);
                if (!string.IsNullOrEmpty(text3))
                {
                    SecurityIdentifier securityIdentifier = null;
                    try
                    {
                        securityIdentifier = new SecurityIdentifier(text3);
                    }
                    catch (ArgumentException ex)
                    {
                        requestContext.Logger.AppendGenericError("Ignored Exception", ex.ToString());
                    }
                    catch (SystemException ex2)
                    {
                        requestContext.Logger.AppendGenericError("Ignored Exception", ex2.ToString());
                    }
                    if (securityIdentifier != null)
                    {
                        requestContext.Logger.SafeSet(HttpProxyMetadata.RoutingHint, "AnchorMailboxHeader-SID");
                        return(new SidAnchorMailbox(securityIdentifier, requestContext));
                    }
                }
            }
            match = RegexUtilities.TryMatch(Constants.GuidAtDomainRegex, text2, requestContext.Logger);
            if (match != null && match.Success)
            {
                string text4 = RegexUtilities.ParseIdentifier(match, "${mailboxguid}", requestContext.Logger);
                if (!string.IsNullOrEmpty(text4))
                {
                    Guid   mailboxGuid = new Guid(text4);
                    string text5       = RegexUtilities.ParseIdentifier(match, "${domain}", requestContext.Logger);
                    string value       = string.Format("AnchorMailboxHeader-MailboxGuid{0}", string.IsNullOrEmpty(text5) ? string.Empty : "WithDomain");
                    requestContext.Logger.SafeSet(HttpProxyMetadata.RoutingHint, value);
                    MailboxGuidAnchorMailbox mailboxGuidAnchorMailbox = new MailboxGuidAnchorMailbox(mailboxGuid, text5, requestContext);
                    if (!string.IsNullOrEmpty(text5))
                    {
                        mailboxGuidAnchorMailbox.FallbackSmtp = text2;
                    }
                    return(mailboxGuidAnchorMailbox);
                }
            }
            if (SmtpAddress.IsValidSmtpAddress(text2))
            {
                requestContext.Logger.Set(HttpProxyMetadata.RoutingHint, "AnchorMailboxHeader-SMTP");
                return(new SmtpAnchorMailbox(text2, requestContext));
            }
            return(null);
        }