Example #1
0
        /// <summary>
        /// 输出结束
        /// </summary>
        /// <param name="response">HTTP响应输出</param>
        /// <returns>是否操作成功</returns>
        internal unsafe bool SocketResponse(ref AutoCSer.Net.Http.Response response)
        {
            long identity = SocketIdentity;

            AutoCSer.Net.Http.SocketBase socket = Socket;
            try
            {
                AutoCSer.Net.Http.Header     header = socket.HttpHeader;
                AutoCSer.Net.Http.HeaderFlag flag   = header.Flag;
                if ((flag & AutoCSer.Net.Http.HeaderFlag.IsVersion) != 0 && (flag & Net.Http.HeaderFlag.IsRange) == 0)
                {
                    response.TryStaticFileCacheControl();
                }
                switch (response.Type)
                {
                case Net.Http.ResponseType.ByteArray:
                case Net.Http.ResponseType.SubByteArray:
                case Net.Http.ResponseType.SubBuffer:
                    if ((flag & Net.Http.HeaderFlag.IsRange) == 0)
                    {
#if DOTNET2 || DOTNET4
                        if ((flag & Net.Http.HeaderFlag.IsGZip) != 0 && isGZip)
                        {
                            response.Compress();
                        }
#else
                        if ((flag & Net.Http.HeaderFlag.IsGZip) != 0 && isGZip)
                        {
                            response.Compress(DomainServer.WebConfigIsFastestCompressionLevel);
                        }
#endif
                        response.NoStore200(DomainServer.HtmlContentType);
                    }
                    else if (header.FormatRange(response.Body.Array.Length))
                    {
                        response.NoStore200(DomainServer.HtmlContentType);
                    }
                    else if (socket.ResponseError(identity, AutoCSer.Net.Http.ResponseState.RangeNotSatisfiable416))
                    {
                        return(true);
                    }
                    break;
                    //case Net.Http.ResponseType.File: response.SetState(AutoCSer.Net.Http.ResponseState.Ok200); break;
                }
                if (socket.Response(identity, ref response))
                {
                    return(true);
                }
            }
            finally { AutoCSer.Net.Http.Response.Push(ref response); }
            return(false);
        }