public override void Reflection(StringBuilder sb) { sb.AppendLine("<AcknowledgePdu>"); base.Reflection(sb); try { sb.AppendLine("<acknowledgeFlag type=\"ushort\">" + AcknowledgeFlag.ToString(CultureInfo.InvariantCulture) + "</acknowledgeFlag>"); sb.AppendLine("<responseFlag type=\"ushort\">" + ResponseFlag.ToString(CultureInfo.InvariantCulture) + "</responseFlag>"); sb.AppendLine("<requestID type=\"uint\">" + RequestID.ToString(CultureInfo.InvariantCulture) + "</requestID>"); sb.AppendLine("</AcknowledgePdu>"); } catch (Exception e) { if (TraceExceptions) { Trace.WriteLine(e); Trace.Flush(); } RaiseExceptionOccured(e); if (ThrowExceptions) { throw; } } }
internal void TryStaticFileCacheControl() { if ((Flag & ResponseFlag.CacheControl) == 0) { CacheControlData = StaticFileCacheControl; Flag |= cacheControlFlag; } }
public void SetResponseFlag(ResponseFlag flag) { if (flag == ResponseFlag.Request_or_Indication) { data[0] &= 0x7F; } else { data[0] |= 0x80; } }
internal void AppendCookie(Cookie cookie) { if ((Flag & ResponseFlag.Cookie) == 0) { Flag |= ResponseFlag.Cookie; } else { cookie.LinkNext = Cookie; } Cookie = cookie; }
internal void SetAccessControlAllowOrigin(BufferIndex index) { if (index.Length == 0) { Flag &= ResponseFlag.All ^ ResponseFlag.AccessControlAllowOrigin; } else { AccessControlAllowOrigin = index; Flag |= ResponseFlag.AccessControlAllowOrigin; } }
internal void SetHeaderSize(int headerSize) { if (headerSize == 0) { Flag &= ResponseFlag.All ^ ResponseFlag.HeaderSize; } else { Flag |= ResponseFlag.HeaderSize; HeaderSize = headerSize; } }
public void SetLastModified(byte[] data) { if (data == null || data.Length == 0) { Flag &= ResponseFlag.All ^ ResponseFlag.LastModified; } else { LastModifiedData = data; Flag |= lastModifiedFlag; } }
internal void SetContentEncoding(byte[] data) { if (data == null || data.Length == 0) { Flag &= ResponseFlag.All ^ ResponseFlag.ContentEncoding; } else { ContentEncoding = data; Flag |= ResponseFlag.ContentEncoding; } }
/// <inheritdoc/> public override int GetHashCode() { int result = 0; result = GenerateHash(result) ^ base.GetHashCode(); result = GenerateHash(result) ^ AcknowledgeFlag.GetHashCode(); result = GenerateHash(result) ^ ResponseFlag.GetHashCode(); result = GenerateHash(result) ^ RequestID.GetHashCode(); return(result); }
public IEnumerable <ResponseFlag> FinalUploadCropImage(UploadMandateModel context) { List <ResponseFlag> common = new List <ResponseFlag>(); ResponseFlag Flag = new ResponseFlag(); try { string croppedFileName = string.Empty; string filePath = string.Empty; string ID = Convert.ToString(Dbsecurity.Decrypt(context.MdtID)); string No = Convert.ToString(Dbsecurity.Decrypt(context.RefrenceNo)); string APPId = Convert.ToString(Dbsecurity.Decrypt(context.AppID)); string UserId = Convert.ToString(Dbsecurity.Decrypt(context.UserId)); string JPGFilepath = string.Empty; croppedFileName = ConfigurationManager.AppSettings["DownloadFileName" + APPId].ToString() + "_" + DateTime.Now.ToString("ddMMyyyy") + "_" + No + ".tif"; filePath = "../MandateFile/" + APPId + "/" + ID + "/" + croppedFileName; string MandateId = ID; if (File.Exists(HttpContext.Current.Server.MapPath("~/MandateFile/" + APPId + "/" + MandateId + "/" + ConfigurationManager.AppSettings["DownloadFileName"].ToString() + "_" + DateTime.Now.ToString("ddMMyyyy") + "_" + Convert.ToString(No) + ".tif")) && File.Exists(HttpContext.Current.Server.MapPath("~/MandateFile/" + APPId + "/" + MandateId + "/" + ConfigurationManager.AppSettings["DownloadFileName"].ToString() + "_" + DateTime.Now.ToString("ddMMyyyy") + "_" + Convert.ToString(No) + ".jpg"))) { croppedFileName = ConfigurationManager.AppSettings["DownloadFileName" + APPId].ToString() + "_" + DateTime.Now.ToString("ddMMyyyy") + "_" + No + ".jpg"; JPGFilepath = "../MandateFile/" + APPId + "/" + ID + "/" + croppedFileName; QuickCheck_AngularEntities dbcontext = new QuickCheck_AngularEntities(); List <GetLogo> dataList1 = new List <GetLogo>(); var Result2 = dbcontext.MultipleResults("[dbo].[Sp_Mandate]").With <GetLogo>().Execute("@QueryType", "@TIPPath", "@PNGPath", "@MandateId", "@UserId", "UpdatePNGTIP", Convert.ToString(filePath), Convert.ToString(JPGFilepath), Convert.ToString(ID), Convert.ToString(UserId)); Flag.Flag = "1"; Flag.FlagValue = "Mandate uploaded successfully"; common.Add(Flag); } else { QuickCheck_AngularEntities dbcontext = new QuickCheck_AngularEntities(); List <GetLogo> dataList1 = new List <GetLogo>(); var Result2 = dbcontext.MultipleResults("[dbo].[Sp_Mandate]").With <GetLogo>().Execute("@QueryType", "@TIPPath", "@PNGPath", "@MandateId", "@UserId", "UpdatePNGTIP", null, null, ID, UserId); Flag.Flag = "1"; Flag.FlagValue = "Image is not Properly Uploaded,Please Upload again"; common.Add(Flag); } // } } catch (Exception ex) { Flag.Flag = "1"; Flag.FlagValue = "Image is not Properly Uploaded,Please Upload again"; common.Add(Flag); } return(common); }
internal void SetLocation(byte[] data, ResponseState state = ResponseState.Found302) { if (data == null) { Location.Set(EmptyArray <byte> .Array, 0, 0); } else { Location.Set(data, 0, data.Length); } State = state; Flag = (Flag | ResponseFlag.Location | ResponseFlag.State) & (ResponseFlag.All ^ ResponseFlag.AccessControlAllowOrigin); }
/// <summary> /// 设置非缓存参数输出 /// </summary> /// <param name="contentType"></param> internal void NoStore200(byte[] contentType) { if (ResponseState == Http.ResponseState.Ok200) { if (ContentTypeData == null) { ContentTypeData = contentType; Flag |= contentTypeFlag; } if (((Flag & ResponseFlag.LastModified) == 0 || LastModifiedData == null) && ((Flag & ResponseFlag.CacheControl) == 0 || CacheControlData == null) && ((Flag & ResponseFlag.ETag) == 0 || ETagData == null)) { CacheControlData = noStoreBytes; Flag |= cacheControlFlag; } } }
/// <summary> /// 设置重定向 /// </summary> /// <param name="header"></param> /// <param name="path"></param> /// <param name="state"></param> internal unsafe void SetLocation(Header header, string path, ResponseState state = ResponseState.Found302) { if (path.Length == 0) { Location.Set(EmptyArray <byte> .Array, 0, 0); } else { header.SetResponseLocationRange(path, ref Location); fixed(char *pathFixed = path) fixed(byte *dataFixed = Location.GetFixedBuffer()) { AutoCSer.Extensions.StringExtension.WriteBytes(pathFixed, path.Length, dataFixed + Location.Start); } } State = state; Flag = (Flag | ResponseFlag.Location | ResponseFlag.State) & (ResponseFlag.All ^ ResponseFlag.AccessControlAllowOrigin); }
/// <summary> /// 添加到 HTTP 响应池 /// </summary> internal void Push() { if ((Flag & ResponseFlag.IsPool) != 0) { freeBody(); Type = ResponseType.ByteArray; Flag = ResponseFlag.IsPool; if (YieldPool.Default.IsPush(this) != 0) { return; } } if (Type == ResponseType.SubBuffer) { Body.Array = EmptyArray <byte> .Array; SubBuffer.Free(); Type = ResponseType.ByteArray; } }
public IEnumerable <ResponseFlag> ViewCropImage(UploadMandateModel context) { List <ResponseFlag> common = new List <ResponseFlag>(); ResponseFlag Flag = new ResponseFlag(); string ID = Convert.ToString(Dbsecurity.Decrypt(context.MdtID)); string No = Convert.ToString(Dbsecurity.Decrypt(context.RefrenceNo)); string APPId = Convert.ToString(Dbsecurity.Decrypt(context.AppID)); string UserId = Convert.ToString(Dbsecurity.Decrypt(context.UserId)); try { QuickCheck_AngularEntities dbcontext = new QuickCheck_AngularEntities(); List <BindGrid> dataList1 = new List <BindGrid>(); var Result2 = dbcontext.MultipleResults("[dbo].[Sp_Mandate]").With <BindGrid>().Execute("@QueryType", "@MandateId", "@AppId", "EditMandate", ID, APPId); Flag.IsPrint = dataList1.Cast <BindGrid>().ToList().Select(x => x.IsPrint).First().ToString(); Flag.IsScan = dataList1.Cast <BindGrid>().ToList().Select(x => x.IsScan).First().ToString(); Flag.Flag = "1"; common.Add(Flag); } catch (Exception ex) { throw ex; } return(common); }
internal void SetLocation(ref SubArray <byte> data, ResponseState state = ResponseState.Found302) { Location = data; State = state; Flag = (Flag | ResponseFlag.Location | ResponseFlag.State) & (ResponseFlag.All ^ ResponseFlag.AccessControlAllowOrigin); }
internal void CancelPool() { Flag &= ResponseFlag.All ^ ResponseFlag.IsPool; }
/// <summary> /// 压缩数据 /// </summary> /// <param name="isFastestCompressionLevel"></param> internal void Compress(bool isFastestCompressionLevel) #endif { switch (Type) { case Net.Http.ResponseType.ByteArray: Body.SetFull(); goto SUBBYTEARRAY; case Net.Http.ResponseType.SubByteArray: SUBBYTEARRAY: if (Body.Length > GZipHeaderSize + 256) { SubArray <byte> compressData = new SubArray <byte>(); try { #if DOTNET2 || DOTNET4 if (AutoCSer.IO.Compression.GzipCompressor.Get(Body.Array, Body.Start, Body.Length, ref SubBuffer, ref compressData, 0, GZipHeaderSize)) #else if (AutoCSer.IO.Compression.GzipCompressor.Get(Body.Array, Body.Start, Body.Length, ref SubBuffer, ref compressData, 0, GZipHeaderSize, isFastestCompressionLevel)) #endif { Body = compressData; Type = compressData.Array == SubBuffer.Buffer ? ResponseType.SubBuffer : ResponseType.SubByteArray; ContentEncoding = GZipEncoding; Flag |= ResponseFlag.ContentEncoding; } } finally { if (Type != ResponseType.SubBuffer) { SubBuffer.Free(); } } } return; case Net.Http.ResponseType.SubBuffer: if (Body.Length > GZipHeaderSize + 256) { SubBuffer.PoolBufferFull compressBuffer = default(SubBuffer.PoolBufferFull); SubArray <byte> compressData = new SubArray <byte>(); byte isCompress = 0; try { #if DOTNET2 || DOTNET4 if (AutoCSer.IO.Compression.GzipCompressor.Get(Body.Array, Body.Start, Body.Length, ref compressBuffer, ref compressData, 0, GZipHeaderSize)) #else if (AutoCSer.IO.Compression.GzipCompressor.Get(Body.Array, Body.Start, Body.Length, ref compressBuffer, ref compressData, 0, GZipHeaderSize, isFastestCompressionLevel)) #endif { isCompress = 1; SubBuffer.Free(); Body = compressData; if (compressData.Array == compressBuffer.Buffer) { SubBuffer = compressBuffer; } else { Type = ResponseType.SubByteArray; } ContentEncoding = GZipEncoding; Flag |= ResponseFlag.ContentEncoding; } } finally { if (isCompress == 0 || Type != ResponseType.SubBuffer) { compressBuffer.Free(); } } } return; } }
/// <summary> /// 设置 HTTP 响应状态 /// </summary> /// <param name="state"></param> internal void SetState(ResponseState state) { State = state; Flag |= ResponseFlag.State; }
/// <summary> /// HTTP 响应头部输出 /// </summary> /// <param name="response"></param> /// <returns></returns> private bool responseHeader(ref Response response) { try { if (!response.IsFile) { ResponseError(ResponseState.NotFound404); return(true); } System.Net.Sockets.Socket socket; ResponseFlag responseFlag = response.Flag; if (response.Body.Length != 0 && Header.IsKeepAlive != 0 && (responseFlag & ResponseFlag.HeaderSize) != 0 && Header.IsRange == 0 && Header.Method != MethodType.HEAD) { if ((socket = Socket) == null) { return(false); } Data = response.Body; Data.MoveStart(-response.HeaderSize); SendType = SendType.Next; ushort timeoutCount; Timeout = Config.GetTimeout(Data.Length, out timeoutCount); if (!SslStream.BeginWrite(Data.Array, Data.Start, Data.Length, sendCallback, this).CompletedSynchronously) { Http.Header.ReceiveTimeout.Push(this, socket, timeoutCount); } return(true); } ResponseSize = response.BodySize; fixed(byte *headerBufferFixed = Header.Buffer.Buffer) { byte * responseSizeFixed = headerBufferFixed + (Header.Buffer.StartIndex + Http.Header.ReceiveBufferSize); RangeLength responseSizeIndex, bodySizeIndex = new RangeLength(), rangeStartIndex = new RangeLength(), rangeEndIndex = new RangeLength(); ResponseState state = response.ResponseState; if (Header.IsRange != 0 && (responseFlag & ResponseFlag.IsPool) != 0) { if (Header.IsFormatRange != 0 || Header.FormatRange(ResponseSize)) { if (state == ResponseState.Ok200) { long rangeStart = Header.RangeStart, rangeEnd = Header.RangeEnd; rangeStartIndex = Number.ToBytes((ulong)rangeStart, responseSizeFixed + 20 * 2); rangeEndIndex = Number.ToBytes((ulong)rangeEnd, responseSizeFixed + 20 * 3); bodySizeIndex = Number.ToBytes((ulong)ResponseSize, responseSizeFixed + 20); response.State = state = ResponseState.PartialContent206; ResponseSize = Header.RangeSize; } } else { ResponseSize = 0; ResponseError(ResponseState.RangeNotSatisfiable416); return(true); } } if ((ulong)ResponseSize < 10) { *responseSizeFixed = (byte)((int)ResponseSize + '0'); responseSizeIndex = new RangeLength(0, 1); } else { responseSizeIndex = Number.ToBytes((ulong)ResponseSize, responseSizeFixed); } ResponseStateAttribute stateAttribute = EnumAttribute <ResponseState, ResponseStateAttribute> .Array((byte)state); if (stateAttribute == null) { stateAttribute = EnumAttribute <ResponseState, ResponseStateAttribute> .Array((byte)ResponseState.ServerError500); } int index = httpVersionSize + stateAttribute.Text.Length + contentLengthSize + responseSizeIndex.Length + 2 + 2; if (state == ResponseState.PartialContent206) { index += rangeSize + rangeStartIndex.Length + rangeEndIndex.Length + bodySizeIndex.Length + 2 + 2; } Cookie cookie = null; SubBuffer.PoolBufferFull buffer = GetBuffer(index = GetResponseHeaderIndex(response, index, ref cookie)); fixed(byte *bufferFixed = buffer.Buffer) { byte *bufferStart = bufferFixed + buffer.StartIndex, write = bufferStart + httpVersionSize; writeHttpVersion(bufferStart); stateAttribute.Write(write); writeContentLength(write += stateAttribute.Text.Length); Memory.SimpleCopyNotNull64(responseSizeFixed + responseSizeIndex.Start, write += contentLengthSize, responseSizeIndex.Length); *(short *)(write += responseSizeIndex.Length) = 0x0a0d; write += sizeof(short); if (state == ResponseState.PartialContent206) { writeRange(write); Memory.SimpleCopyNotNull64(responseSizeFixed + (rangeStartIndex.Start + 20 * 2), write += rangeSize, rangeStartIndex.Length); *(write += rangeStartIndex.Length) = (byte)'-'; Memory.SimpleCopyNotNull64(responseSizeFixed + (rangeEndIndex.Start + 20 * 3), ++write, rangeEndIndex.Length); *(write += rangeEndIndex.Length) = (byte)'/'; Memory.SimpleCopyNotNull64(responseSizeFixed + (bodySizeIndex.Start + 20), ++write, bodySizeIndex.Length); *(short *)(write += bodySizeIndex.Length) = 0x0a0d; write += sizeof(short); } index = (int)(CreateResponseHeader(response, cookie, write, index) - bufferStart); // if (checkIndex != index) // { // Server.RegisterServer.TcpServer.Log.add(Log.Type.Fatal, "responseHeader checkIndex[" + checkIndex.toString() + "] != index[" + index.toString() + @"] //" + System.Text.Encoding.ASCII.GetString(buffer.Buffer, buffer.StartIndex, index)); // } if (ResponseSize != 0) { switch (response.Type) { case ResponseType.ByteArray: if (buffer.Length - index >= (int)ResponseSize) { System.Buffer.BlockCopy(response.Body.Array, state == ResponseState.PartialContent206 ? (int)Header.RangeStart : 0, buffer.Buffer, buffer.StartIndex + index, (int)ResponseSize); index += (int)ResponseSize; ResponseSize = 0; } break; case ResponseType.SubByteArray: if (Header.IsKeepAlive != 0 && (responseFlag & ResponseFlag.CanHeaderSize) != 0 && index <= response.Body.Start && Header.IsRange == 0) { if ((socket = Socket) == null) { return(false); fixed(byte *bodyFixed = response.Body.Array) Memory.CopyNotNull(bufferStart, bodyFixed + response.Body.Start - index, index); response.SetHeaderSize(index); Data = response.Body; Data.MoveStart(-response.HeaderSize); SendType = SendType.Next; ushort timeoutCount; Timeout = Config.GetTimeout(Data.Length, out timeoutCount); if (!SslStream.BeginWrite(Data.Array, Data.Start, Data.Length, sendCallback, this).CompletedSynchronously) { Http.Header.ReceiveTimeout.Push(this, socket, timeoutCount); } return(true); } goto COPY; case ResponseType.SubBuffer: COPY: if (buffer.Length - index >= (int)ResponseSize) { System.Buffer.BlockCopy(response.Body.Array, state == ResponseState.PartialContent206 ? response.Body.Start + (int)Header.RangeStart : response.Body.Start, buffer.Buffer, buffer.StartIndex + index, (int)ResponseSize); index += (int)ResponseSize; ResponseSize = 0; } break; } } } if ((socket = Socket) != null) { if (ResponseSize == 0) { SendType = SendType.Next; } else { this.HttpResponse = response; SendType = SendType.Body; response = null; } Timeout = Config.GetTimeout(index); if (!SslStream.BeginWrite(buffer.Buffer, buffer.StartIndex, index, sendCallback, this).CompletedSynchronously) { Http.Header.ReceiveTimeout.Push(this, socket); } return(true); } } } catch (Exception error) { Server.RegisterServer.TcpServer.Log.Add(Log.LogType.Error, error); } finally { Http.Response.Push(ref response); } return(false); }
internal void SetJsContentType(HttpDomainServer.FileServer domainServer) { ContentTypeData = domainServer.JsContentType; Flag |= contentTypeFlag; }
/// <summary> /// 获取 HTTP 响应头部缓冲区长度 /// </summary> /// <param name="response"></param> /// <param name="index"></param> /// <param name="cookie">Cookie</param> /// <returns></returns> internal int GetResponseHeaderIndex(Response response, int index, ref Cookie cookie) { ResponseFlag responseFlag = response.Flag; if (isResponseServer) { index += AutoCSerServer.Length; } if ((responseFlag & ResponseFlag.Location) != 0) { index += locationSize + response.Location.Length + 2; } if ((responseFlag & ResponseFlag.LastModified) != 0) { index += lastModifiedSize + response.LastModifiedData.Length + 2; } if ((responseFlag & ResponseFlag.CacheControl) != 0) { index += cacheControlSize + response.CacheControlData.Length + 2; } if ((responseFlag & ResponseFlag.ContentType) != 0) { index += contentTypeSize + response.ContentTypeData.Length + 2; } if ((responseFlag & ResponseFlag.ContentEncoding) != 0) { index += contentEncodingSize + response.ContentEncoding.Length + 2; } if ((responseFlag & ResponseFlag.ETag) != 0) { index += eTagSize + response.ETagData.Length + 2 + 1; } if ((responseFlag & ResponseFlag.ContentDisposition) != 0) { index += contentDispositionSize + response.ContentDispositionData.Length + 2; } if ((responseFlag & ResponseFlag.AccessControlAllowOrigin) != 0) { index += accessControlAllowOriginSize + response.AccessControlAllowOrigin.Length + 2; } if (HttpHeader.IsKeepAlive != 0) { index += keepAliveSize; } if (isResponseDate) { index += dateSize + Date.ToByteLength + 2; } if ((responseFlag & ResponseFlag.Cookie) != 0) { Cookie nextCookie = cookie = response.GetCookieClear(); while ((nextCookie = nextCookie.GetSize(ref index)) != null) { ; } } //int checkIndex = index; if (HttpHeader.Method == MethodType.HEAD) { ResponseSize = 0; index += 5; } else if (ResponseSize > 1500 - 20 || (int)ResponseSize <= 5) { index += 5; } else if ((index += (int)ResponseSize) > Http.Header.NameStartIndex) { index -= (int)ResponseSize - 5; } return(index); }
/// <summary> /// 创建 HTTP 响应头部 /// </summary> /// <param name="response"></param> /// <param name="cookie"></param> /// <param name="write"></param> /// <param name="index"></param> /// <returns></returns> internal byte *CreateResponseHeader(Response response, Cookie cookie, byte *write, int index) { ResponseFlag responseFlag = response.Flag; if ((responseFlag & ResponseFlag.Location) != 0) { writeLocation(write); fixed(byte *locationFixed = response.Location.Array) Memory.SimpleCopyNotNull64(locationFixed + response.Location.Start, write += locationSize, index = response.Location.Length); *(short *)(write += index) = 0x0a0d; write += sizeof(short); } if ((responseFlag & ResponseFlag.CacheControl) != 0) { writeCacheControl(write); Memory.SimpleCopyNotNull64(response.CacheControlData, write += cacheControlSize, index = response.CacheControlData.Length); *(short *)(write += index) = 0x0a0d; write += sizeof(short); } if ((responseFlag & ResponseFlag.ContentType) != 0) { writeContentType(write); Memory.SimpleCopyNotNull64(response.ContentTypeData, write += contentTypeSize, index = response.ContentTypeData.Length); *(short *)(write += index) = 0x0a0d; write += sizeof(short); } if ((responseFlag & ResponseFlag.ContentEncoding) != 0) { writeContentEncoding(write); Memory.SimpleCopyNotNull64(response.ContentEncoding, write += contentEncodingSize, index = response.ContentEncoding.Length); *(short *)(write += index) = 0x0a0d; write += sizeof(short); } if ((responseFlag & ResponseFlag.ETag) != 0) { writeETag(write); Memory.SimpleCopyNotNull64(response.ETagData, write += eTagSize, index = response.ETagData.Length); *(int *)(write += index) = '"' + 0x0a0d00; write += 3; } if ((responseFlag & ResponseFlag.ContentDisposition) != 0) { writeContentDisposition(write); Memory.SimpleCopyNotNull64(response.ContentDispositionData, write += contentDispositionSize, index = response.ContentDispositionData.Length); *(short *)(write += index) = 0x0a0d; write += sizeof(short); } if ((responseFlag & ResponseFlag.AccessControlAllowOrigin) != 0) { writeAccessControlAllowOrigin(write); fixed(byte *requestBufferFixed = HttpHeader.Buffer.Buffer) Memory.SimpleCopyNotNull64(requestBufferFixed + HttpHeader.Buffer.StartIndex + response.AccessControlAllowOrigin.StartIndex, write += accessControlAllowOriginSize, index = response.AccessControlAllowOrigin.Length); *(short *)(write += index) = 0x0a0d; write += sizeof(short); } if (cookie != null) { Cookie writeCookie = cookie; int cookieCount = 0; do { Cookie nextCookie = writeCookie.Write(ref write); ++cookieCount; if (nextCookie == null) { if (cookieCount == 1) { Cookie.YieldPool.Default.PushNotNull(cookie); } else { Cookie.YieldPool.Default.PushLink(cookie, writeCookie, cookieCount); } break; } writeCookie = nextCookie; }while (true); } if ((responseFlag & ResponseFlag.LastModified) != 0) { writeLastModified(write); Memory.SimpleCopyNotNull64(response.LastModifiedData, write += lastModifiedSize, index = response.LastModifiedData.Length); *(short *)(write += index) = 0x0a0d; write += sizeof(short); } if (HttpHeader.IsKeepAlive != 0) { writeKeepAlive(write); write += keepAliveSize; } if (isResponseServer) { Memory.SimpleCopyNotNull64(responseServer.Byte, write, AutoCSerServer.Length); write += AutoCSerServer.Length; } if (isResponseDate) { writeDate(write); getDate(write += dateSize); *(int *)(write += Date.ToByteLength) = 0x0a0d0a0d; write += sizeof(int); } else { *(short *)(write) = 0x0a0d; write += sizeof(short); } return(write); }
internal void SetLocation(byte[] data, int index, int length, ResponseState state = ResponseState.Found302) { Location.Set(data, index, length); State = state; Flag = (Flag | ResponseFlag.Location | ResponseFlag.State) & (ResponseFlag.All ^ ResponseFlag.AccessControlAllowOrigin); }
/// <summary> /// HTTP 响应头部输出 /// </summary> /// <param name="response"></param> /// <returns></returns> private bool responseHeader(ref Response response) { try { if (!response.IsFile) { ResponseError(ResponseState.NotFound404); return true; } System.Net.Sockets.Socket socket; ResponseFlag responseFlag = response.Flag; if (response.Body.Length != 0 && Header.IsKeepAlive != 0 && (responseFlag & ResponseFlag.HeaderSize) != 0 && Header.IsRange == 0 && Header.Method != MethodType.HEAD) { if ((socket = Socket) == null) return false; Data = response.Body; Data.MoveStart(-response.HeaderSize); SendType = SendType.Next; Timeout = Config.GetTimeout(Data.Length); #if DOTNET2 SocketError socketError; IAsyncResult async = socket.BeginSend(Data.Array, Data.Start, Data.Length, SocketFlags.None, out socketError, onSendAsyncCallback, socket); if (socketError == SocketError.Success) { if (!async.CompletedSynchronously) Http.Header.ReceiveTimeout.Push(this, socket); return true; } return false; #else sendAsyncLock.EnterSleepFlag(); sendAsyncEventArgs.SetBuffer(Data.Array, Data.Start, Data.Length); if (socket.SendAsync(sendAsyncEventArgs)) { sendAsyncLock.SleepFlag = 0; Http.Header.ReceiveTimeout.Push(this, socket); sendAsyncLock.Exit(); return true; } sendAsyncLock.ExitSleepFlag(); if (--sendDepth == 0) { sendDepth = maxSendDepth; OnSendThreadArray.Default.CurrentThread.Add(this); return true; } return onSend(); #endif } ResponseSize = response.BodySize; fixed (byte* headerBufferFixed = Header.Buffer.GetFixedBuffer()) { byte* responseSizeFixed = headerBufferFixed + (Header.Buffer.StartIndex + Http.Header.ReceiveBufferSize); RangeLength responseSizeIndex, bodySizeIndex = new RangeLength(), rangeStartIndex = new RangeLength(), rangeEndIndex = new RangeLength(); ResponseState state = response.ResponseState; if (Header.IsRange != 0 && (responseFlag & ResponseFlag.IsPool) != 0) { if (Header.IsFormatRange != 0 || Header.FormatRange(ResponseSize)) { if (state == ResponseState.Ok200) { long rangeStart = Header.RangeStart, rangeEnd = Header.RangeEnd; rangeStartIndex = NumberExtension.ToBytes((ulong)rangeStart, responseSizeFixed + 20 * 2); rangeEndIndex = NumberExtension.ToBytes((ulong)rangeEnd, responseSizeFixed + 20 * 3); bodySizeIndex = NumberExtension.ToBytes((ulong)ResponseSize, responseSizeFixed + 20); response.State = state = ResponseState.PartialContent206; ResponseSize = Header.RangeSize; } } else { ResponseSize = 0; ResponseError(ResponseState.RangeNotSatisfiable416); return true; } } if ((ulong)ResponseSize < 10) { *responseSizeFixed = (byte)((int)ResponseSize + '0'); responseSizeIndex = new RangeLength(0, 1); } else responseSizeIndex = NumberExtension.ToBytes((ulong)ResponseSize, responseSizeFixed); ResponseStateAttribute stateAttribute = EnumAttribute<ResponseState, ResponseStateAttribute>.Array((byte)state); if (stateAttribute == null) stateAttribute = EnumAttribute<ResponseState, ResponseStateAttribute>.Array((byte)ResponseState.ServerError500); int index = httpVersionSize + stateAttribute.Text.Length + contentLengthSize + responseSizeIndex.Length + 2 + 2; if (state == ResponseState.PartialContent206) { index += rangeSize + rangeStartIndex.Length + rangeEndIndex.Length + bodySizeIndex.Length + 2 + 2; } Cookie cookie = null; SubBuffer.PoolBufferFull buffer = GetBuffer(index = GetResponseHeaderIndex(response, index, ref cookie)); fixed (byte* bufferFixed = buffer.GetFixedBuffer()) { byte* bufferStart = bufferFixed + buffer.StartIndex, write = bufferStart + httpVersionSize; writeHttpVersion(bufferStart); stateAttribute.Write(write); writeContentLength(write += stateAttribute.Text.Length); AutoCSer.Memory.Common.SimpleCopyNotNull64(responseSizeFixed + responseSizeIndex.Start, write += contentLengthSize, responseSizeIndex.Length); *(short*)(write += responseSizeIndex.Length) = 0x0a0d; write += sizeof(short); if (state == ResponseState.PartialContent206) { writeRange(write); AutoCSer.Memory.Common.SimpleCopyNotNull64(responseSizeFixed + (rangeStartIndex.Start + 20 * 2), write += rangeSize, rangeStartIndex.Length); *(write += rangeStartIndex.Length) = (byte)'-'; AutoCSer.Memory.Common.SimpleCopyNotNull64(responseSizeFixed + (rangeEndIndex.Start + 20 * 3), ++write, rangeEndIndex.Length); *(write += rangeEndIndex.Length) = (byte)'/'; AutoCSer.Memory.Common.SimpleCopyNotNull64(responseSizeFixed + (bodySizeIndex.Start + 20), ++write, bodySizeIndex.Length); *(short*)(write += bodySizeIndex.Length) = 0x0a0d; write += sizeof(short); } index = (int)(CreateResponseHeader(response, cookie, write, index) - bufferStart); // if (checkIndex != index) // { // Server.RegisterServer.TcpServer.Log.add(Log.Type.Fatal, "responseHeader checkIndex[" + checkIndex.toString() + "] != index[" + index.toString() + @"] //" + System.Text.Encoding.ASCII.GetString(buffer.Buffer, buffer.StartIndex, index)); // } if (ResponseSize != 0) { switch (response.Type) { case ResponseType.ByteArray: if (buffer.Length - index >= (int)ResponseSize) { System.Buffer.BlockCopy(response.Body.Array, state == ResponseState.PartialContent206 ? (int)Header.RangeStart : 0, buffer.Buffer, buffer.StartIndex + index, (int)ResponseSize); index += (int)ResponseSize; ResponseSize = 0; } break; case ResponseType.SubByteArray: if (Header.IsKeepAlive != 0 && (responseFlag & ResponseFlag.CanHeaderSize) != 0 && index <= response.Body.Start && Header.IsRange == 0) { if ((socket = Socket) == null) return false; fixed (byte* bodyFixed = response.Body.GetFixedBuffer()) AutoCSer.Memory.Common.CopyNotNull(bufferStart, bodyFixed + response.Body.Start - index, index); response.SetHeaderSize(index); Data = response.Body; Data.MoveStart(-response.HeaderSize); SendType = SendType.Next; Timeout = Config.GetTimeout(Data.Length); #if DOTNET2 SocketError socketError; IAsyncResult async = socket.BeginSend(Data.Array, Data.Start, Data.Length, SocketFlags.None, out socketError, onSendAsyncCallback, socket); if (socketError == SocketError.Success) { if (!async.CompletedSynchronously) Http.Header.ReceiveTimeout.Push(this, socket); return true; } return false; #else sendAsyncLock.EnterSleepFlag(); sendAsyncEventArgs.SetBuffer(Data.Array, Data.Start, Data.Length); if (socket.SendAsync(sendAsyncEventArgs)) { sendAsyncLock.SleepFlag = 0; Http.Header.ReceiveTimeout.Push(this, socket); sendAsyncLock.Exit(); return true; } sendAsyncLock.ExitSleepFlag(); if (--sendDepth == 0) { sendDepth = maxSendDepth; OnSendThreadArray.Default.CurrentThread.Add(this); return true; } return onSend(); #endif } goto COPY; case ResponseType.SubBuffer: COPY: if (buffer.Length - index >= (int)ResponseSize) { System.Buffer.BlockCopy(response.Body.Array, state == ResponseState.PartialContent206 ? response.Body.Start + (int)Header.RangeStart : response.Body.Start, buffer.Buffer, buffer.StartIndex + index, (int)ResponseSize); index += (int)ResponseSize; ResponseSize = 0; } break; } } } if ((socket = Socket) != null) { if (ResponseSize == 0) SendType = SendType.Next; else { this.HttpResponse = response; SendType = SendType.Body; response = null; } Data.Set(buffer.Buffer, buffer.StartIndex, index); Timeout = Config.GetTimeout(Data.Length); #if DOTNET2 SocketError socketError; IAsyncResult async = socket.BeginSend(Data.Array, Data.Start, index, SocketFlags.None, out socketError, onSendAsyncCallback, socket); if (socketError == SocketError.Success) { if (!async.CompletedSynchronously) Http.Header.ReceiveTimeout.Push(this, socket); return true; } return false; #else sendAsyncLock.EnterSleepFlag(); sendAsyncEventArgs.SetBuffer(Data.Array, Data.Start, index); if (socket.SendAsync(sendAsyncEventArgs)) { sendAsyncLock.SleepFlag = 0; Http.Header.ReceiveTimeout.Push(this, socket); sendAsyncLock.Exit(); return true; } sendAsyncLock.ExitSleepFlag(); if (--sendDepth == 0) { sendDepth = maxSendDepth; OnSendThreadArray.Default.CurrentThread.Add(this); return true; } return onSend(); #endif } } } catch (Exception error) { Server.RegisterServer.TcpServer.Log.Exception(error, null, LogLevel.Exception | LogLevel.AutoCSer); } finally { Http.Response.Push(ref response); } return false; }
public IEnumerable <ResponseFlag> UploadCropImage(UploadMandateModel context) { List <ResponseFlag> common = new List <ResponseFlag>(); ResponseFlag Flag = new ResponseFlag(); string UserId = Dbsecurity.Decrypt(context.UserId); string ID = Convert.ToString(Dbsecurity.Decrypt(context.MdtID)); string No = Convert.ToString(Dbsecurity.Decrypt(context.RefrenceNo)); string APPId = Convert.ToString(Dbsecurity.Decrypt(context.AppID)); string extension = string.Empty; string JPGFilepath = string.Empty; byte[] bytes = System.Convert.FromBase64String(context.ScannedImage); extension = context.Extention; if (extension == ".jpg" || extension == ".jpeg" || extension == ".png" || extension == ".gif" || extension == ".bmp") { string fileName1 = ConfigurationManager.AppSettings["DownloadFileName"].ToString() + "_" + DateTime.Now.ToString("ddMMyyyy") + "_" + No + ".jpg"; if (!Directory.Exists(HttpContext.Current.Server.MapPath("~/FullMandate/" + APPId + "/" + ID))) { Directory.CreateDirectory(HttpContext.Current.Server.MapPath("~/FullMandate/" + APPId + "/" + ID)); } System.IO.DirectoryInfo di = new DirectoryInfo(HttpContext.Current.Server.MapPath("~/FullMandate/" + APPId + "/" + ID)); foreach (FileInfo file in di.GetFiles()) { file.Delete(); } string targetPath = HttpContext.Current.Server.MapPath("~/FullMandate/" + APPId + "/" + ID + @"\" + fileName1); using (System.Drawing.Image image = new Bitmap(new MemoryStream(bytes))) { image.Save(targetPath, ImageFormat.Png); } } bool Flag1 = Directory.Exists(HttpContext.Current.Server.MapPath("~/MandateFile/" + APPId + "/" + ID)); if (!Flag1) { Directory.CreateDirectory(HttpContext.Current.Server.MapPath("~/MandateFile/" + APPId + "/" + ID)); } else { System.IO.DirectoryInfo di = new DirectoryInfo(HttpContext.Current.Server.MapPath("~/MandateFile/" + APPId + "/" + ID)); foreach (FileInfo file in di.GetFiles()) { file.Delete(); } } string croppedFileName = string.Empty; string croppedFilePath = string.Empty; string fileName = ConfigurationManager.AppSettings["DownloadFileName"].ToString() + "_" + DateTime.Now.ToString("ddMMyyyy") + "_" + No + ".jpg"; string filePath = Path.Combine(HttpContext.Current.Server.MapPath("~/FullMandate/"), ConfigurationManager.AppSettings["DownloadFileName" + context.AppID].ToString() + "_" + DateTime.Now.ToString("ddMMyyyy") + "_" + No + ".jpg"); if (File.Exists(filePath)) { System.Drawing.Image orgImg = System.Drawing.Image.FromFile(filePath); Rectangle areaToCrop = new Rectangle(Convert.ToInt32(0), Convert.ToInt32(0), Convert.ToInt32(orgImg.Width), Convert.ToInt32(orgImg.Height)); if (orgImg.Width > orgImg.Height) { Greater = true; } else { Greater = false; } try { Bitmap bitMap = new Bitmap(orgImg.Width, orgImg.Height, System.Drawing.Imaging.PixelFormat.Format16bppRgb555); using (Graphics g = Graphics.FromImage(bitMap)) { //Draw image to screen g.DrawImage(orgImg, new Rectangle(0, 0, bitMap.Width, bitMap.Height), areaToCrop, GraphicsUnit.Pixel); g.CompositingQuality = CompositingQuality.HighQuality; g.SmoothingMode = SmoothingMode.HighQuality; g.InterpolationMode = InterpolationMode.HighQualityBicubic; } bitMap.SetResolution(96, 96); croppedFileName = ConfigurationManager.AppSettings["DownloadFileName" + APPId].ToString() + "_" + DateTime.Now.ToString("ddMMyyyy") + "_" + No + ".jpg"; //Create path to store the cropped image if (!Directory.Exists(HttpContext.Current.Server.MapPath("~/CropImage/" + APPId + "/" + ID))) { Directory.CreateDirectory(HttpContext.Current.Server.MapPath("~/CropImage/" + APPId + "/" + ID)); } croppedFilePath = Path.Combine(HttpContext.Current.Server.MapPath("~/CropImage/" + APPId + "/" + ID), croppedFileName); bitMap.Save(croppedFilePath); var CropImagePath = Path.Combine(HttpContext.Current.Server.MapPath("~/CropImage/" + APPId + "/" + ID), ConfigurationManager.AppSettings["DownloadFileName" + APPId].ToString() + "_" + DateTime.Now.ToString("ddMMyyyy") + "_" + No + ".jpg"); System.Drawing.Image CropImage = System.Drawing.Image.FromFile(CropImagePath); using (var image = CropImage) { int newWidth = 0; int newHeight = 0; if (Greater == true) { newWidth = 827; // New Width of Image in Pixel newHeight = 356; //newWidth = 4000; // New Width of Image in Pixel //newHeight = 1700; } else { newWidth = 356; newHeight = 827; //newWidth = 1700; //newHeight = 4000; } var thumbImg = new Bitmap(newWidth, newHeight, System.Drawing.Imaging.PixelFormat.Format16bppRgb555); var thumbGraph = Graphics.FromImage(thumbImg); var imgRectangle = new Rectangle(0, 0, newWidth, newHeight); thumbGraph.DrawImage(image, imgRectangle); thumbImg.SetResolution(100, 100); System.Drawing.Bitmap b0 = CopyToBpp(thumbImg, 8); b0.SetResolution(100, 100); JPGFilepath = "../MandateFile/" + APPId + "/" + ID + "/" + croppedFileName; croppedFileName = ConfigurationManager.AppSettings["DownloadFileName"].ToString() + "_" + DateTime.Now.ToString("ddMMyyyy") + "_" + No + ".jpg"; croppedFilePath = Path.Combine(HttpContext.Current.Server.MapPath("~/CropImage/" + APPId + "/" + ID), croppedFileName); ImageCodecInfo jpgEncoder = GetEncoder(ImageFormat.Jpeg); System.Drawing.Imaging.Encoder myEncoder = System.Drawing.Imaging.Encoder.Quality; EncoderParameters myEncoderParameters = new EncoderParameters(1); EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, 50L); myEncoderParameters.Param[0] = myEncoderParameter; b0.Save(croppedFilePath, jpgEncoder, myEncoderParameters); } var CropImagePath1 = Path.Combine(HttpContext.Current.Server.MapPath("~/CropImage/" + APPId + "/" + ID), ConfigurationManager.AppSettings["DownloadFileName" + APPId].ToString() + "_" + DateTime.Now.ToString("ddMMyyyy") + "_" + No + ".jpg"); System.Drawing.Image CropImage1 = System.Drawing.Image.FromFile(CropImagePath1); bool result = true; using (var image1 = CropImage1) { int newWidth = 0; int newHeight = 0; if (Greater == true) { newWidth = CropImage1.Width; newHeight = CropImage1.Height; //newWidth = 2800; //newHeight = 1200; } else { newWidth = CropImage1.Width; newHeight = CropImage1.Height; //newWidth = 1200; //newHeight = 2800; } var thumbImg1 = new Bitmap(newWidth, newHeight); var thumbGraph1 = Graphics.FromImage(thumbImg1); var imgRectangle1 = new Rectangle(0, 0, newWidth, newHeight); thumbGraph1.DrawImage(image1, imgRectangle1); System.Drawing.Bitmap b1 = CopyToBpp(thumbImg1, 1); b1.SetResolution(200, 200); croppedFileName = ConfigurationManager.AppSettings["DownloadFileName"].ToString() + "_" + DateTime.Now.ToString("ddMMyyyy") + "_" + No + ".jpg"; croppedFilePath = Path.Combine(HttpContext.Current.Server.MapPath("~/CropImage/" + APPId + "/" + ID), croppedFileName); ImageCodecInfo jpgEncoder = GetEncoder(ImageFormat.Tiff); System.Drawing.Imaging.Encoder myEncoder = System.Drawing.Imaging.Encoder.Compression; EncoderParameters myEncoderParameters = new EncoderParameters(1); EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, (long)EncoderValue.CompressionCCITT4); myEncoderParameters.Param[0] = myEncoderParameter; b1.Save(croppedFilePath, jpgEncoder, myEncoderParameters); List <Checklogo> dataList = new List <Checklogo>(); var Result2 = dbcontext.MultipleResults("[dbo].[Sp_Mandate]").With <Checklogo>().Execute("@QueryType", "@MandateId", "CheckLogo", ID); dataList = Result2.FirstOrDefault().Cast <Checklogo>().ToList(); string isQR = dataList.Cast <Checklogo>().ToList().Select(x => x.PrintQR).First().ToString(); if (isQR == "True") { result = (Convert.ToString(ID + "_" + No) == GetMandatefromQR(croppedFilePath, ID)) ? true : false; } } orgImg.Dispose(); bitMap = null; if (File.Exists(CropImagePath1)) { File.Delete(CropImagePath1); } if (File.Exists(filePath)) { File.Delete(filePath); } if (!Directory.Exists(HttpContext.Current.Server.MapPath("~/FullMandate/" + APPId + "/" + ID))) { Directory.Delete(HttpContext.Current.Server.MapPath("~/FullMandate/" + APPId + "/" + ID)); } if (Directory.Exists(HttpContext.Current.Server.MapPath("~/CropImage/" + APPId + "/" + ID))) { Directory.Delete(HttpContext.Current.Server.MapPath("~/CropImage/" + APPId + "/" + ID)); } if (result) { Flag.Flag = "1"; Flag.FlagValue = "Image cropped and saved successfully"; string Fullmandatepath = Path.Combine(HttpContext.Current.Server.MapPath("~/MandateFile/" + APPId + "/" + ID), ConfigurationManager.AppSettings["DownloadFileName"].ToString() + "_" + DateTime.Now.ToString("ddMMyyyy") + "_" + No + ".jpg"); Flag.Base64image = base64image.ConvertImageBase64(Fullmandatepath); common.Add(Flag); QuickCheck_AngularEntities dbcontext = new QuickCheck_AngularEntities(); List <GetLogo> dataList1 = new List <GetLogo>(); var Result2 = dbcontext.MultipleResults("[dbo].[Sp_Mandate]").With <GetLogo>().Execute("@QueryType", "@TIPPath", "@PNGPath", "@MandateId", "@UserId", "UpdatePNGTIP", Convert.ToString(filePath), Convert.ToString(JPGFilepath), Convert.ToString(ID), UserId); } else { Flag.Flag = "0"; Flag.FlagValue = "Invalid Mandate. Please Re-Upload Valid Mandate"; common.Add(Flag); if (File.Exists(HttpContext.Current.Server.MapPath("~/MandateFile/" + APPId + "/" + ID + "/" + ConfigurationManager.AppSettings["DownloadFileName"].ToString() + "_" + DateTime.Now.ToString("ddMMyyyy") + "_" + No + ".tif"))) { File.Delete(HttpContext.Current.Server.MapPath("~/MandateFile/" + APPId + "/" + ID + "/" + ConfigurationManager.AppSettings["DownloadFileName"].ToString() + "_" + DateTime.Now.ToString("ddMMyyyy") + "_" + No + ".tif")); } if (File.Exists(HttpContext.Current.Server.MapPath("~/MandateFile/" + APPId + "/" + ID + "/" + ConfigurationManager.AppSettings["DownloadFileName"].ToString() + "_" + DateTime.Now.ToString("ddMMyyyy") + "_" + No + ".jpg"))) { File.Delete(HttpContext.Current.Server.MapPath("~/MandateFile/" + APPId + "/" + ID + "/" + ConfigurationManager.AppSettings["DownloadFileName"].ToString() + "_" + DateTime.Now.ToString("ddMMyyyy") + "_" + No + ".jpg")); } List <GetLogo> dataList1 = new List <GetLogo>(); QuickCheck_AngularEntities dbcontext = new QuickCheck_AngularEntities(); var Result2 = dbcontext.MultipleResults("[dbo].[Sp_Mandate]").With <GetLogo>().Execute("@QueryType", "@TIPPath", "@PNGPath", "@MandateId", "@UserId", "UpdatePNGTIP", null, null, ID, UserId); if (Directory.Exists(HttpContext.Current.Server.MapPath("~/MandateFile/" + APPId + "/" + ID))) { Directory.Delete(HttpContext.Current.Server.MapPath("~/MandateFile/" + APPId + "/" + ID)); } } } catch (Exception ex) { Flag.Flag = "0"; Flag.FlagValue = "Oops!! error occured : " + ex.Message.ToString(); common.Add(Flag); } finally { fileName = string.Empty; filePath = string.Empty; croppedFileName = string.Empty; croppedFilePath = string.Empty; } } return(common); }