Example #1
0
 internal Http.Response GetErrorResponseData(Http.ResponseState state, Http.HeaderFlag gzipFlag)
 {
     if (errorResponses != null)
     {
         return(gzipFlag == 0 ? errorResponses[(int)state].Key : errorResponses[(int)state].Value);
     }
     return(null);
 }
Example #2
0
        /// <summary>
        /// HTTP文件请求处理
        /// </summary>
        /// <param name="header">请求头部信息</param>
        /// <param name="fileCache">文件输出信息</param>
        /// <param name="response">HTTP响应</param>
        protected unsafe void file(Http.Header header, FileCache fileCache, ref Http.Response response)
        {
            Http.HeaderFlag headerFlag = header.Flag;
            if (fileCache == null)
            {
                if (response != null)
                {
                    if (response.Type == Http.ResponseType.File)
                    {
                        if ((headerFlag & Http.HeaderFlag.IsRange) != 0 && !header.FormatRange(response.BodySize))
                        {
                            response = Http.Response.RangeNotSatisfiable416;
                            return;
                        }
                        if ((headerFlag & Http.HeaderFlag.IsVersion) != 0 || isStaticFileCacheControl(header.Path))
                        {
                            response.CacheControl = AutoCSer.Net.Http.Response.StaticFileCacheControl;
                        }
                    }
                    if ((response.Flag & Http.ResponseFlag.IsPool) != 0 && (headerFlag & Http.HeaderFlag.IsSetOrigin) != 0 && this.isOrigin(header.Origin, (headerFlag & Http.HeaderFlag.IsSsl) != 0))
                    {
                        response.SetAccessControlAllowOrigin(header.OriginIndex);
                    }
                }
                return;
            }
            if ((headerFlag & Http.HeaderFlag.IsRange) != 0 && !header.FormatRange(fileCache.Data.Length))
            {
                response = Http.Response.RangeNotSatisfiable416;
                return;
            }
            byte[] cacheControl = (headerFlag & Http.HeaderFlag.IsVersion) != 0 || isStaticFileCacheControl(header.Path) ? AutoCSer.Net.Http.Response.StaticFileCacheControl : this.cacheControl;
            bool   isOrigin = (headerFlag & Http.HeaderFlag.IsSetOrigin) != 0 && this.isOrigin(header.Origin, (headerFlag & Http.HeaderFlag.IsSsl) != 0), isHeader = !isOrigin && (headerFlag & Http.HeaderFlag.IsRange) == 0 && FileCacheQueue.IsFileCacheHeader;

            if (isHeader && (response = (headerFlag & Http.HeaderFlag.IsGZip) == 0 ? fileCache.Response : fileCache.GZipResponse) != null && response.IsCacheControl(cacheControl))
            {
                return;
            }
            SubArray <byte> body = (headerFlag & Http.HeaderFlag.IsGZip) != 0 && (headerFlag & Http.HeaderFlag.IsRange) == 0 ? fileCache.GZipData : fileCache.Data;

            response = Http.Response.Get();
            //response.State = Http.ResponseState.Ok200;
            if (isHeader && body.Start == FileCache.HttpHeaderSize)
            {
                response.SetCanHeaderSize(ref body);
            }
            else
            {
                response.SetBody(ref body);
            }
            response.CacheControl = cacheControl;
            response.ContentType  = fileCache.ContentType;
            if (body.Array != fileCache.Data.Array)
            {
                response.SetContentEncoding(Http.Response.GZipEncoding);
            }
            response.SetLastModified(fileCache.LastModified);
            if (isOrigin)
            {
                response.SetAccessControlAllowOrigin(header.OriginIndex);
            }
            return;
        }