protected Payload.ExceptionPayload GetExceptionPayload(Exception ex)
        {
            if (ex == null)
            {
                return(null);
            }

            var payload = new Payload.ExceptionPayload();

            payload.Message = ex.Message;

            var exType = ex.GetType();

            foreach (var mapping in BaseExceptionsTypesMapping)
            {
                if (mapping.First.IsAssignableFrom(exType))
                {
                    payload.Name = mapping.Second;

                    if (BaseExceptionsWithSpecificTypes.Contains(mapping.First))
                    {
                        OSException osException = ex as OSException;
                        if (osException != null)
                        {
                            payload.SpecificType = osException.GetUniqueName();
                        }
                        else
                        {
                            payload.SpecificType = exType.FullName;
                        }
                    }
                    break;
                }
            }

            if (payload.Name == null)
            {
                throw new InvalidOperationException("Failed to find exception mapping for " + exType.Name);
            }

            return(payload);
        }
        protected IHttpActionResult GetScreenServiceResult(HttpStatusCode status, object dataPayload, Payload.ResponseVersionInfo versionInfo, Payload.ExceptionPayload exception, MobileLoginInfoEndpoint loginEndpoint, HeContext context)
        {
            var hasNewRuntimeSession = context != null && context.Session != null && context.Session.HasNewRuntimeSessionStorage;

            return(GetScreenServiceResult(status, dataPayload, versionInfo, exception, loginEndpoint, hasNewRuntimeSession ? context.Session.NewRuntimeLoginInfo : null, hasNewRuntimeSession ? context.Session.GetRolesInfo() : null));
        }
        // TODO JMR Remove this method and merge it with the above overload when the Obsolete overload is removed
        private IHttpActionResult GetScreenServiceResult(HttpStatusCode status, object dataPayload, Payload.ResponseVersionInfo versionInfo, Payload.ExceptionPayload exception, MobileLoginInfoEndpoint loginEndpoint, LoginInfo loginInfo, Func <string> rolesInfo)
        {
            var responseMessage = new HttpResponseMessage(status);

            string rolesInfoserialized = null;

            if (loginEndpoint != null && loginInfo != null)
            {
                if (rolesInfo != null)
                {
                    rolesInfoserialized = loginInfo.UpdateRolesHashAndCalculateRolesInfo(rolesInfo());
                }
                loginEndpoint.WriteLoginInfoToResponse(loginInfo);
            }

            responseMessage.Content = new ObjectContent(typeof(Payload.ResponsePayload),
                                                        new Payload.ResponsePayload(versionInfo, dataPayload, exception, rolesInfoserialized), JsonMediaTypeFormater);

            RestServiceHttpUtils.AddNoCacheHeaders(responseMessage);

            if (DebuggerHelper.IsRunning)
            {
                if (DebuggerHelper.StopImmediately)
                {
                    RestServiceHttpUtils.AddCustomHeader(responseMessage, StopImmediatelyHeaderName, DebuggerHelper.StopImmediately.ToString());
                }
                else if (DebuggerHelper.RunToBreakpoint != null)
                {
                    RestServiceHttpUtils.AddCustomHeader(responseMessage, RunToBreakpointHeaderName, DebuggerHelper.RunToBreakpoint.ToString(true));
                }
            }

            return(ResponseMessage(responseMessage));
        }
 protected IHttpActionResult GetScreenServiceResult(HttpStatusCode status, Payload.ExceptionPayload exception)
 {
     return(GetScreenServiceResult(status, null, null, exception, null, null, null));
 }