コード例 #1
0
        internal override void ProcessMessageHeadersFromQueryString(Message request)
        {
            OwaServiceMessage owaServiceMessage = request as OwaServiceMessage;
            HttpRequest       httpRequest       = owaServiceMessage.HttpRequest;
            bool flag = false;

            foreach (object obj in httpRequest.QueryString.Keys)
            {
                string text = (string)obj;
                string a;
                if ((a = text) != null)
                {
                    if (!(a == "ManagementRole"))
                    {
                        if (a == "RequestServerVersion")
                        {
                            base.RequestVersion = JsonMessageHeaderProcessor.ReadRequestVersionHeader(httpRequest.QueryString.Get(text));
                        }
                    }
                    else
                    {
                        base.QueryStringXmlDictionaryReaderAction(httpRequest.QueryString.Get(text), delegate(XmlDictionaryReader reader)
                        {
                            base.ManagementRoleType = JsonMessageHeaderProcessor.ReadManagementRoleHeader(reader);
                        });
                        flag = true;
                    }
                }
            }
            if (flag)
            {
                base.ProcessRequestVersion(request);
            }
        }
コード例 #2
0
        internal override void ProcessHttpHeaders(Message request, ExchangeVersion defaultVersion)
        {
            OwaServiceMessage owaServiceMessage = request as OwaServiceMessage;
            HttpRequest       httpRequest       = owaServiceMessage.HttpRequest;

            if (httpRequest == null)
            {
                return;
            }
            string text = httpRequest.Headers["X-MailboxCulture"];

            if (!string.IsNullOrEmpty(text))
            {
                base.MailboxCulture = text;
            }
            string text2 = httpRequest.Headers["X-TimeZoneContext"];

            if (!string.IsNullOrEmpty(text2))
            {
                base.TimeZoneContext = new TimeZoneContextType
                {
                    TimeZoneDefinition = new TimeZoneDefinitionType
                    {
                        Id = text2
                    }
                };
            }
            string value = httpRequest.Headers["X-DateTimePrecision"];

            if (!string.IsNullOrEmpty(value))
            {
                base.DateTimePrecision = new DateTimePrecision?(JsonMessageHeaderProcessor.ReadDateTimePrecisionHeader(value));
            }
            string value2 = httpRequest.Headers["X-BackgroundLoad"];

            if (!string.IsNullOrEmpty(value2))
            {
                base.IsBackgroundLoad = bool.Parse(value2);
            }
            ExchangeVersion ewsVersionFromHttpHeaders = this.GetEwsVersionFromHttpHeaders(request, httpRequest);

            if (ewsVersionFromHttpHeaders != null)
            {
                base.RequestVersion = ewsVersionFromHttpHeaders;
            }
            else
            {
                string text3 = httpRequest.Headers["X-RequestServerVersion"];
                base.RequestVersion = (string.IsNullOrEmpty(text3) ? defaultVersion : JsonMessageHeaderProcessor.ReadRequestVersionHeader(text3));
            }
            base.ProcessRequestVersion(request);
        }
コード例 #3
0
        internal override void ProcessMessageHeaders(Message request)
        {
            OwaServiceMessage owaServiceMessage = request as OwaServiceMessage;
            BaseJsonRequest   baseJsonRequest   = owaServiceMessage.Request as BaseJsonRequest;

            if (baseJsonRequest != null && baseJsonRequest.Header != null)
            {
                base.RequestVersion     = JsonMessageHeaderProcessor.ReadRequestVersionHeader(baseJsonRequest.Header.RequestServerVersion.ToString());
                base.MailboxCulture     = baseJsonRequest.Header.MailboxCulture;
                base.TimeZoneContext    = baseJsonRequest.Header.TimeZoneContext;
                base.DateTimePrecision  = new DateTimePrecision?(baseJsonRequest.Header.DateTimePrecision);
                base.IsBackgroundLoad   = baseJsonRequest.Header.BackgroundLoad;
                base.ManagementRoleType = baseJsonRequest.Header.ManagementRole;
            }
            base.ProcessRequestVersion(request);
        }
コード例 #4
0
        private object InternalAfterReceiveRequest(ref Message request, RequestDetailsLogger logger)
        {
            try
            {
                Globals.UpdateErrorTracingConfiguration();
                IActivityScope             activityScope = OwaApplication.GetRequestDetailsLogger.ActivityScope;
                HttpRequestMessageProperty httpRequestMessageProperty = (HttpRequestMessageProperty)request.Properties[HttpRequestMessageProperty.Name];
                string value = httpRequestMessageProperty.Headers[OWADispatchOperationSelector.Action];
                activityScope.SetProperty(ExtensibleLoggerMetadata.EventId, value);
                string value2 = httpRequestMessageProperty.Headers["X-OWA-ClientBuildVersion"];
                if (!string.IsNullOrEmpty(value2))
                {
                    activityScope.SetProperty(OwaServerLogger.LoggerData.ClientBuildVersion, value2);
                }
                else
                {
                    activityScope.SetProperty(OwaServerLogger.LoggerData.ClientBuildVersion, "NA");
                }
                string value3 = httpRequestMessageProperty.Headers["X-EWS-TargetVersion"];
                if (!string.IsNullOrEmpty(value3))
                {
                    activityScope.SetProperty(OwaServerLogger.LoggerData.RequestVersion, value3);
                }
                else
                {
                    activityScope.SetProperty(OwaServerLogger.LoggerData.RequestVersion, "NA");
                }
                JsonMessageHeaderProcessor jsonMessageHeaderProcessor = new JsonMessageHeaderProcessor();
                string methodName = OWAMessageInspector.GetMethodName(request);
                bool   flag       = OWAMessageInspector.RequestNeedsHeaderProcessing(methodName);
                bool   flag2      = OWAMessageInspector.RequestNeedsQueryStringProcessing(methodName);
                bool   flag3      = OWAMessageInspector.RequestNeedsHttpHeaderProcessing(methodName);
                if (flag || flag2 || flag3)
                {
                    using (MessageBuffer messageBuffer = request.CreateBufferedCopy(int.MaxValue))
                    {
                        Message request2 = messageBuffer.CreateMessage();
                        if (flag)
                        {
                            jsonMessageHeaderProcessor.ProcessMessageHeaders(request2);
                            jsonMessageHeaderProcessor.ProcessEwsVersionFromHttpHeaders(request);
                        }
                        else if (flag2)
                        {
                            jsonMessageHeaderProcessor.ProcessMessageHeadersFromQueryString(request2);
                        }
                        else if (flag3)
                        {
                            jsonMessageHeaderProcessor.ProcessHttpHeaders(request, ExchangeVersion.Exchange2013);
                        }
                        request = messageBuffer.CreateMessage();
                    }
                }
                request.Properties["MessageHeaderProcessor"] = jsonMessageHeaderProcessor;
                request.Properties["ConnectionCostType"]     = 0;
                WebMethodEntry jsonWebMethodEntry;
                if (!OWAMessageInspector.MethodNameToWebMethodEntryMap.Member.TryGetValue(methodName, out jsonWebMethodEntry))
                {
                    jsonWebMethodEntry = WebMethodEntry.JsonWebMethodEntry;
                }
                request.Properties["WebMethodEntry"] = jsonWebMethodEntry;
                MessageHeaderProcessor messageHeaderProcessor = (MessageHeaderProcessor)request.Properties["MessageHeaderProcessor"];
                messageHeaderProcessor.MarkMessageHeaderAsUnderstoodIfExists(request, "RequestServerVersion", "http://schemas.microsoft.com/exchange/services/2006/types");
                RequestDetailsLogger.LogEvent(logger, OwaServerLogger.LoggerData.CallContextInitBegin);
                Message     requestRef  = request;
                CallContext callContext = OwaApplication.GetRequestDetailsLogger.TrackLatency <CallContext>(ServiceLatencyMetadata.CallContextInitLatency, () => CallContextUtilities.CreateCallContext(requestRef, messageHeaderProcessor, true, ""));
                RequestDetailsLogger.LogEvent(logger, OwaServerLogger.LoggerData.CallContextInitEnd);
                callContext.ProtocolLog.Set(OwaServerLogger.LoggerData.IsMowaClient, OfflineClientRequestUtilities.IsRequestFromMOWAClient(callContext.HttpContext.Request, callContext.HttpContext.Request.UserAgent) ? 1 : 0);
                bool?flag4 = new bool?(OfflineClientRequestUtilities.IsRequestFromOfflineClient(callContext.HttpContext.Request));
                if (flag4 != null)
                {
                    callContext.ProtocolLog.Set(OwaServerLogger.LoggerData.IsOfflineEnabled, flag4.Value ? 1 : 0);
                }
                callContext.OwaExplicitLogonUser = UserContextUtilities.GetExplicitLogonUser(HttpContext.Current);
                if (string.IsNullOrEmpty(callContext.OwaExplicitLogonUser))
                {
                    OWAMessageInspector.CheckThatUserProvisionedDevice(methodName, callContext);
                    OWAMessageInspector.CheckMowaRemoteWipe(methodName, callContext);
                    OWAMessageInspector.CheckClientVersion(callContext);
                    OWAMessageInspector.CheckMowaDisabled(callContext);
                    OWAMessageInspector.CheckMobileDevicePolicyIsCorrect(methodName, callContext);
                }
                OWAMessageInspector.MarkResponseNonCacheable(methodName);
                callContext.WorkloadType       = WorkloadType.Owa;
                callContext.UsingWcfDispatcher = true;
                callContext.ProtocolLog.Set(OwaServerLogger.LoggerData.UsingWcfHttpHandler, 1);
                if (ExchangeVersion.Current == ExchangeVersion.Exchange2007)
                {
                    ExchangeVersion.Current = ExchangeVersion.Exchange2013;
                }
                if (OWAMessageInspector.ShouldCreateUserContext(callContext))
                {
                    UserContext userContext = UserContextManager.GetMailboxContext(callContext.HttpContext, callContext.EffectiveCaller, true) as UserContext;
                    if (userContext != null)
                    {
                        callContext.OwaCulture = userContext.UserCulture;
                        if (userContext.FeaturesManager != null)
                        {
                            callContext.FeaturesManager = userContext.FeaturesManager;
                            if (userContext.FeaturesManager.ServerSettings.OwaMailboxSessionCloning.Enabled)
                            {
                                callContext.OwaUserContextKey = userContext.Key.ToString();
                            }
                        }
                    }
                }
            }
            catch (LocalizedException ex)
            {
                Microsoft.Exchange.Diagnostics.Components.Services.ExTraceGlobals.CommonAlgorithmTracer.TraceError <string, string>((long)this.GetHashCode(), "[OWAMessageInspector::AfterReceiveRequest] Caught localized exception trying to create callcontext.  Class: {0}, Message: {1}", ex.GetType().FullName, ex.Message);
                OwaServerTraceLogger.AppendToLog(new TraceLogEvent("OWAMessageInspector", null, "InternalAfterReceiveRequest", string.Format("OwaServiceFaultException_InnerException - {0}", ex)));
                RequestDetailsLoggerBase <RequestDetailsLogger> .SafeLogRequestException(OwaApplication.GetRequestDetailsLogger, ex, "OwaServiceFaultException_InnerException");

                throw OwaFaultExceptionUtilities.CreateFault(ex);
            }
            return(null);
        }