private void OnEncode(ISession session, object data, System.IO.Stream stream) { PipeStream pstream = stream.ToPipeStream(); MemoryBlockCollection msgsize; if (SizeType == FixedSizeType.INT) { msgsize = pstream.Allocate(4); } else { msgsize = pstream.Allocate(2); } int length = (int)pstream.CacheLength; OnWrite(session, data, pstream); if (SizeType == FixedSizeType.INT) { int len = (int)pstream.CacheLength - length; if (!pstream.LittleEndian) { len = BitHelper.SwapInt32(len); } msgsize.Full(len); } else { short len = (short)(pstream.CacheLength - length); if (!pstream.LittleEndian) { len = BitHelper.SwapInt16(len); } msgsize.Full(len); } }
public void Encode(object data, IClient client, Stream stream) { PipeStream pstream = stream.ToPipeStream(); MemoryBlockCollection msgsize; if (SizeType == FixedSizeType.INT) { msgsize = pstream.Allocate(4); } else { msgsize = pstream.Allocate(2); } int length = (int)pstream.CacheLength; OnWrite(data, client, pstream); if (SizeType == FixedSizeType.INT) { int len = (int)pstream.CacheLength - length; if (!pstream.LittleEndian) { len = BitHelper.SwapInt32(len); } msgsize.Full(len); } else { short len = (short)(pstream.CacheLength - length); if (!pstream.LittleEndian) { len = BitHelper.SwapInt16(len); } msgsize.Full(len); } }
public async Task fortunes(PipeStream stream, HttpToken token, ISession session) { try { var data = await token.Db.LoadFortunesRows(); stream.Write(_HtmlResultPreamble.Data, 0, _HtmlResultPreamble.Length); token.ContentLength = stream.Allocate(HttpHandler._LengthSize); GMTDate.Default.Write(stream); token.ContentPostion = stream.CacheLength; var html = token.GetHtmlBufferWriter(); html.Reset(); html.Write(_fortunesTableStart.Data, 0, _fortunesTableStart.Length); foreach (var item in data) { html.Write(_fortunesRowStart.Data, 0, _fortunesRowStart.Length); WriteNumeric(html, (uint)item.Id); html.Write(_fortunesColumn.Data, 0, _fortunesColumn.Length); html.Write(HtmlEncoder.Encode(item.Message)); html.Write(_fortunesRowEnd.Data, 0, _fortunesRowEnd.Length); } html.Write(_fortunesTableEnd.Data, 0, _fortunesTableEnd.Length); stream.Write(html.Data, 0, html.Length); } catch (Exception e_) { HttpServer.ApiServer.Log(BeetleX.EventArgs.LogType.Error, null, $"fortunes error {e_.Message}@{e_.StackTrace}"); stream.Write(e_.Message); } OnCompleted(stream, session, token); }
private void OnWriteContentLength(PipeStream stream, HttpToken token) { stream.Write(_headerContentLength.Data, 0, _headerContentLength.Length); token.ContentLength = stream.Allocate(10); stream.Write(_2line, 0, 4); token.ContentPostion = stream.CacheLength; }
protected override void OnWrite(ISession session, object data, PipeStream writer) { TypeHeader.WriteType(data, writer); MemoryBlockCollection bodysize = writer.Allocate(4); int bodyStartlegnth = (int)writer.CacheLength; ProtoBuf.Meta.RuntimeTypeModel.Default.Serialize(writer, data); bodysize.Full((int)writer.CacheLength - bodyStartlegnth); }
public Task Default(PipeStream stream, HttpToken token, ISession session) { stream.Write(_defaultPreamble.Data, 0, _defaultPreamble.Length); token.ContentLength = stream.Allocate(HttpHandler._LengthSize); GMTDate.Default.Write(stream); token.ContentPostion = stream.CacheLength; stream.Write("<b> beetlex server</b><hr/>"); stream.Write("path not found!"); OnCompleted(stream, session, token); return(Task.CompletedTask); }
public void Execute(PipeStream stream) { stream.Write(Method + " "); stream.Write(Url); if (QuestryString != null && QuestryString.Count > 0) { int i = 0; foreach (var item in this.QuestryString) { if (i == 0) { stream.Write("?"); } else { stream.Write("&"); } stream.Write(item.Key + "="); stream.Write(System.Net.WebUtility.UrlEncode(item.Value)); i++; } } stream.Write(HeaderTypeFactory.SPACE_BYTES, 0, 1); stream.Write(this.HttpProtocol); stream.Write(HeaderTypeFactory.LINE_BYTES, 0, 2); if (Header != null) { Header.Write(stream); } if (Method == POST || Method == PUT) { if (Body != null) { stream.Write(HeaderTypeFactory.CONTENT_LENGTH_BYTES, 0, 16); MemoryBlockCollection contentLength = stream.Allocate(10); stream.Write(HeaderTypeFactory.TOW_LINE_BYTES, 0, 4); int len = stream.CacheLength; Formater.Serialization(Body, stream); int count = stream.CacheLength - len; contentLength.Full(count.ToString().PadRight(10), stream.Encoding); } else { stream.Write(HeaderTypeFactory.NULL_CONTENT_LENGTH_BYTES, 0, HeaderTypeFactory.NULL_CONTENT_LENGTH_BYTES.Length); stream.Write(HeaderTypeFactory.LINE_BYTES, 0, 2); } } else { stream.Write(HeaderTypeFactory.LINE_BYTES, 0, 2); } }
internal void Write(PipeStream stream) { string stateLine = string.Concat(HttpVersion, " ", mCode, " ", mCodeMsg); stream.WriteLine(stateLine); Header.Write(stream); MemoryBlockCollection contentLength = stream.Allocate(28); stream.WriteLine(""); int count = Serializer.Serialize(stream, mBody); contentLength.Full("Content-Length: " + count.ToString().PadRight(10) + "\r\n", stream.Encoding); }
public void Encode(Options rpcOption, object data, PipeStream stream) { if (data == null) { stream.Write(0); } else { var head = stream.Allocate(4); var postion = stream.CacheLength; MessagePackSerializer.Serialize(data.GetType(), stream, data); head.Full(stream.CacheLength - postion); } }
public void Write(Options rpcOption, PipeStream stream) { mOption = rpcOption; try { var head = stream.Allocate(4); var postion = stream.CacheLength; uint id = (uint)ID; if (NeedReply) { id |= 1 << 30; } stream.Write(id); stream.WriteShortUTF(Url); stream.Write(Status); if (Header != null) { stream.Write((byte)Header.Count); foreach (var item in Header) { stream.WriteShortUTF(item.Key); stream.WriteShortUTF(item.Value); } } else { stream.Write((byte)0); } if (Data != null) { stream.Write((byte)Data.Length); for (int i = 0; i < Data.Length; i++) { rpcOption.ParameterFormater.Encode(rpcOption, Data[i], stream); } } else { stream.Write((byte)0); } head.Full(stream.CacheLength - postion); } catch (Exception e_) { throw new BXException($"Write protocol data error {e_.Message}", e_); } }
public void Encode(Options rpcOption, object data, PipeStream stream) { if (data == null) { stream.Write(0); } else { var head = stream.Allocate(4); var postion = stream.CacheLength; string txt = Newtonsoft.Json.JsonConvert.SerializeObject(data); stream.Write(txt); head.Full(stream.CacheLength - postion); } }
private void OnEncode(ISession session, object data, System.IO.Stream stream) { PipeStream pstream = stream.ToPipeStream(); MemoryBlockCollection msgsize = pstream.Allocate(4); int length = (int)pstream.CacheLength; OnWrite(session, data, pstream); if (SizeType == FixedSizeType.INT) { msgsize.Full((int)pstream.CacheLength - length); } else { msgsize.Full((Int16)pstream.CacheLength - length); } }
public void Encode(object data, IClient client, Stream stream) { PipeStream pstream = stream.ToPipeStream(); MemoryBlockCollection msgsize = pstream.Allocate(4); int length = (int)pstream.CacheLength; OnWrite(data, client, pstream); if (SizeType == FixedSizeType.INT) { msgsize.Full((int)pstream.CacheLength - length); } else { msgsize.Full((Int16)pstream.CacheLength - length); } }
internal void Write(PipeStream stream) { stream.Write(HttpVersion); stream.Write(HeaderType.SPACE_BYTES[0]); stream.Write(mCode); stream.Write(HeaderType.SPACE_BYTES[0]); stream.Write(CodeMsg); stream.Write(HeaderType.LINE_BYTES); Header.Write(stream); for (int i = 0; i < mSetCookies.Count; i++) { HeaderType.Write(HeaderType.SET_COOKIE, stream); stream.Write(mSetCookies[i]); stream.Write(HeaderType.LINE_BYTES); } if (mBody != null) { StaticResurce.FileBlock fb = mBody as StaticResurce.FileBlock; if (fb != null) { stream.Write(HeaderType.LINE_BYTES); fb.Write(stream); } else { MemoryBlockCollection contentLength = stream.Allocate(28); stream.Write(HeaderType.LINE_BYTES); int count = Serializer.Serialize(stream, mBody); contentLength.Full("Content-Length: " + count.ToString().PadRight(10) + "\r\n", stream.Encoding); } } else { stream.Write(HeaderType.NULL_CONTENT_LENGTH_BYTES); stream.Write(HeaderType.LINE_BYTES); } if (Session.Server.EnableLog(EventArgs.LogType.Debug)) { Session.Server.Log(EventArgs.LogType.Debug, Session, "{0} {1}", Request.ClientIPAddress, this.ToString()); } if (Session.Server.EnableLog(EventArgs.LogType.Info)) { Session.Server.Log(EventArgs.LogType.Info, Session, "{4} {0} {1} response {2} {3}", Request.Method, Request.Url, Code, CodeMsg, Request.ClientIPAddress); } }
public async ValueTask db(PipeStream stream, HttpToken token, ISession session) { try { var data = await token.Db.LoadSingleQueryRow(); stream.Write(_jsonResultPreamble.Data, 0, _jsonResultPreamble.Length); token.ContentLength = stream.Allocate(HttpHandler._LengthSize); GMTDate.Default.Write(stream); token.ContentPostion = stream.CacheLength; System.Text.Json.JsonSerializer.Serialize <World>(GetUtf8JsonWriter(stream, token), data, SerializerOptions); } catch (Exception e_) { HttpServer.ApiServer.Log(BeetleX.EventArgs.LogType.Error, null, $"db error {e_.Message}@{e_.StackTrace}"); stream.Write(e_.Message); } OnCompleted(stream, session, token); }
public async ValueTask updates(string queryString, PipeStream stream, HttpToken token, ISession session) { int count = 1; if (!string.IsNullOrEmpty(queryString)) { var values = queryString.Split('='); if (values.Length > 1) { if (int.TryParse(values[1], out int size)) { count = size; } } } if (count > 500) { count = 500; } if (count < 1) { count = 1; } try { var data = await token.Db.LoadMultipleUpdatesRows(count); stream.Write(_jsonResultPreamble.Data, 0, _jsonResultPreamble.Length); token.ContentLength = stream.Allocate(HttpHandler._LengthSize); GMTDate.Default.Write(stream); token.ContentPostion = stream.CacheLength; System.Text.Json.JsonSerializer.Serialize <World[]>(GetUtf8JsonWriter(stream, token), data, SerializerOptions); } catch (Exception e_) { HttpServer.ApiServer.Log(BeetleX.EventArgs.LogType.Error, null, $"updates error {e_.Message}@{e_.StackTrace}"); stream.Write(e_.Message); } OnCompleted(stream, session, token); }
private void OnWriteContentLength(PipeStream stream, HttpToken token) { var action = token.CurrentRequest.Action; if (action == ActionType.Json) { stream.Write(_jsonPreamble.Data, 0, _jsonPreamble.Length); stream.Write(_2line, 0, 4); } else if (action == ActionType.Plaintext) { stream.Write(_plaintextPreamble.Data, 0, _plaintextPreamble.Length); stream.Write(_2line, 0, 4); } else { stream.Write(_headerContentLength.Data, 0, _headerContentLength.Length); token.ContentLength = stream.Allocate(HttpHandler._LengthSize); stream.Write(_2line, 0, 4); token.ContentPostion = stream.CacheLength; } }
void IDataResponse.Write(PipeStream stream) { if (GZip) { var mb = stream.Allocate(16); stream.Write(HeaderTypeFactory.LINE_BYTES); int len = stream.CacheLength; if (gZipStream == null) { gZipStream = new GZipStream(stream, CompressionMode.Compress, true); } gZipStream.Write(Data.Array, Data.Offset, Data.Count); gZipStream.Flush(); if (Offset == mFileResource.Length) { if (gZipStream != null) { using (stream.LockFree()) { gZipStream.Dispose(); } } } string lenstr = (stream.CacheLength - len).ToString("X"); mb.Full(Encoding.UTF8.GetBytes(lenstr.PadRight(16))); } else { int len = Data.Count; stream.Write(len.ToString("X")); stream.Write(HeaderTypeFactory.LINE_BYTES); stream.Write(Data.Array, Data.Offset, Data.Count); } stream.WriteLine(""); if (Offset == mFileResource.Length) { stream.Write(HeaderTypeFactory.CHUNKED_BYTES); } }
public async Task caching(string queryString, PipeStream stream, HttpToken token, ISession session) { int count = 1; if (!string.IsNullOrEmpty(queryString)) { var values = queryString.Split('='); if (values.Length > 1) { if (int.TryParse(values[1], out int size)) { count = size; } } } if (count > 500) { count = 500; } if (count < 1) { count = 1; } try { var data = await token.Db.LoadCachedQueries(count); stream.Write(_jsonResultPreamble.Data, 0, _jsonResultPreamble.Length); token.ContentLength = stream.Allocate(HttpHandler._LengthSize); GMTDate.Default.Write(stream); token.ContentPostion = stream.CacheLength; await JsonSerializer.NonGeneric.Utf8.SerializeAsync(data, stream); } catch (Exception e_) { stream.Write(e_.Message); } OnCompleted(stream, session, token); }
internal void Write(PipeStream stream) { stream.Write(HttpVersion); stream.Write(HeaderType.SPACE_BYTES[0]); stream.Write(mCode); stream.Write(HeaderType.SPACE_BYTES[0]); stream.Write(CodeMsg); stream.Write(HeaderType.LINE_BYTES); Header.Write(stream); for (int i = 0; i < mSetCookies.Count; i++) { HeaderType.Write(HeaderType.SET_COOKIE, stream); stream.Write(mSetCookies[i]); stream.Write(HeaderType.LINE_BYTES); } if (mBody != null) { StaticResurce.FileBlock fb = mBody as StaticResurce.FileBlock; if (fb != null) { stream.Write(HeaderType.LINE_BYTES); fb.Write(stream); } else { MemoryBlockCollection contentLength = stream.Allocate(28); stream.Write(HeaderType.LINE_BYTES); int count = Serializer.Serialize(stream, mBody); contentLength.Full("Content-Length: " + count.ToString().PadRight(10) + "\r\n", stream.Encoding); } } else { stream.Write(HeaderType.NULL_CONTENT_LENGTH_BYTES); stream.Write(HeaderType.LINE_BYTES); } }
internal void Execute(PipeStream stream) { var buffer = HttpParse.GetByteBuffer(); int offset = 0; offset += Encoding.ASCII.GetBytes(Method, 0, Method.Length, buffer, offset); buffer[offset] = HeaderTypeFactory._SPACE_BYTE; offset++; offset += Encoding.ASCII.GetBytes(Url, 0, Url.Length, buffer, offset); if (QuestryString != null && QuestryString.Count > 0) { int i = 0; foreach (var item in this.QuestryString) { string key = item.Key; string value = item.Value; if (string.IsNullOrEmpty(value)) { continue; } value = System.Net.WebUtility.UrlEncode(value); if (i == 0) { buffer[offset] = HeaderTypeFactory._QMARK; offset++; } else { buffer[offset] = HeaderTypeFactory._AND; offset++; } offset += Encoding.ASCII.GetBytes(key, 0, key.Length, buffer, offset); buffer[offset] = HeaderTypeFactory._EQ; offset++; offset += Encoding.ASCII.GetBytes(value, 0, value.Length, buffer, offset); i++; } } buffer[offset] = HeaderTypeFactory._SPACE_BYTE; offset++; offset += Encoding.ASCII.GetBytes(HttpProtocol, 0, HttpProtocol.Length, buffer, offset); buffer[offset] = HeaderTypeFactory._LINE_R; offset++; buffer[offset] = HeaderTypeFactory._LINE_N; offset++; stream.Write(buffer, 0, offset); if (Header != null) { Header.Write(stream); } if (Method == POST || Method == PUT) { if (Body != null) { stream.Write(HeaderTypeFactory.CONTENT_LENGTH_BYTES, 0, 16); MemoryBlockCollection contentLength = stream.Allocate(10); stream.Write(HeaderTypeFactory.TOW_LINE_BYTES, 0, 4); int len = stream.CacheLength; Formater.Serialization(Body, stream); int count = stream.CacheLength - len; contentLength.Full(count.ToString().PadRight(10), stream.Encoding); } else { stream.Write(HeaderTypeFactory.NULL_CONTENT_LENGTH_BYTES, 0, HeaderTypeFactory.NULL_CONTENT_LENGTH_BYTES.Length); stream.Write(HeaderTypeFactory.LINE_BYTES, 0, 2); } } else { stream.Write(HeaderTypeFactory.LINE_BYTES, 0, 2); } }
private void OnWrite(PipeStream stream) { IResult result = mBody as IResult; if (result != null) { result.Setting(this); } byte[] buffer = HttpParse.GetByteBuffer(); int hlen = 0; hlen = hlen + Encoding.ASCII.GetBytes(HttpVersion, 0, HttpVersion.Length, buffer, hlen); buffer[hlen] = HeaderTypeFactory._SPACE_BYTE; hlen++; hlen = hlen + Encoding.ASCII.GetBytes(Code, 0, Code.Length, buffer, hlen); buffer[hlen] = HeaderTypeFactory._SPACE_BYTE; hlen++; hlen = hlen + Encoding.ASCII.GetBytes(CodeMsg, 0, CodeMsg.Length, buffer, hlen); buffer[hlen] = HeaderTypeFactory._LINE_R; hlen++; buffer[hlen] = HeaderTypeFactory._LINE_N; hlen++; stream.Write(buffer, 0, hlen); stream.Write(HeaderTypeFactory.SERVAR_HEADER_BYTES, 0, HeaderTypeFactory.SERVAR_HEADER_BYTES.Length); Header.Write(stream); if (result != null) { result.ContentType.Write(stream); } var datebuffer = GMTDate.Default.DATE; stream.Write(datebuffer.Array, 0, datebuffer.Count); for (int i = 0; i < mSetCookies.Count; i++) { HeaderTypeFactory.Write(HeaderTypeFactory.SET_COOKIE, stream); stream.Write(mSetCookies[i]); stream.Write(HeaderTypeFactory.LINE_BYTES, 0, 2); } if (mBody != null) { if (mBody is IDataResponse dataResponse) { stream.Write(HeaderTypeFactory.LINE_BYTES, 0, 2); dataResponse.Write(stream); } else { if (result.HasBody) { if (result.Length > 0) { stream.Write(HeaderTypeFactory.CONTENT_LENGTH_BYTES, 0, HeaderTypeFactory.CONTENT_LENGTH_BYTES.Length); stream.Write(result.Length.ToString()); stream.Write(HeaderTypeFactory.TOW_LINE_BYTES, 0, 4); result.Write(stream, this); } else { stream.Write(HeaderTypeFactory.CONTENT_LENGTH_BYTES, 0, HeaderTypeFactory.CONTENT_LENGTH_BYTES.Length); MemoryBlockCollection contentLength = stream.Allocate(10); stream.Write(HeaderTypeFactory.TOW_LINE_BYTES, 0, 4); int len = stream.CacheLength; result.Write(stream, this); int count = stream.CacheLength - len; // contentLength.Full(count.ToString().PadRight(10), stream.Encoding); contentLength.Full(GetLengthBuffer(count.ToString())); } } else { stream.Write(HeaderTypeFactory.NULL_CONTENT_LENGTH_BYTES, 0, HeaderTypeFactory.NULL_CONTENT_LENGTH_BYTES.Length); stream.Write(HeaderTypeFactory.LINE_BYTES, 0, 2); } } } else { stream.Write(HeaderTypeFactory.NULL_CONTENT_LENGTH_BYTES, 0, HeaderTypeFactory.NULL_CONTENT_LENGTH_BYTES.Length); stream.Write(HeaderTypeFactory.LINE_BYTES, 0, 2); } if (Session.Server.EnableLog(EventArgs.LogType.Debug)) { Session.Server.Log(EventArgs.LogType.Debug, Session, "{0} {1}", Request.RemoteIPAddress, this.ToString()); } if (Session.Server.EnableLog(EventArgs.LogType.Info)) { Session.Server.Log(EventArgs.LogType.Info, Session, "{4} {0} {1} response {2} {3}", Request.Method, Request.Url, Code, CodeMsg, Request.RemoteIPAddress); } }
internal void Write(PipeStream stream) { IResult result = mBody as IResult; if (result != null) { this.Header[HeaderTypeFactory.CONTENT_TYPE] = result.ContentType; result.Setting(this); } byte[] buffer = HttpParse.GetByteBuffer(); //string line = string.Concat(HttpVersion, " ", mCode, " ", CodeMsg, "\r\n"); //var hlen = Encoding.ASCII.GetBytes(line, 0, line.Length, buffer, 0); int hlen = 0; hlen = hlen + Encoding.ASCII.GetBytes(HttpVersion, 0, HttpVersion.Length, buffer, hlen); buffer[hlen] = HeaderTypeFactory._SPACE_BYTE; hlen++; hlen = hlen + Encoding.ASCII.GetBytes(mCode, 0, mCode.Length, buffer, hlen); buffer[hlen] = HeaderTypeFactory._SPACE_BYTE; hlen++; hlen = hlen + Encoding.ASCII.GetBytes(CodeMsg, 0, CodeMsg.Length, buffer, hlen); buffer[hlen] = HeaderTypeFactory._LINE_R; hlen++; buffer[hlen] = HeaderTypeFactory._LINE_N; hlen++; stream.Write(buffer, 0, hlen); stream.Write(HeaderTypeFactory.SERVAR_HEADER_BYTES, 0, HeaderTypeFactory.SERVAR_HEADER_BYTES.Length); Header.Write(stream); for (int i = 0; i < mSetCookies.Count; i++) { HeaderTypeFactory.Write(HeaderTypeFactory.SET_COOKIE, stream); stream.Write(mSetCookies[i]); stream.Write(HeaderTypeFactory.LINE_BYTES, 0, 2); } if (mBody != null) { StaticResurce.FileBlock fb = mBody as StaticResurce.FileBlock; if (fb != null) { stream.Write(HeaderTypeFactory.LINE_BYTES, 0, 2); fb.Write(stream); } else { if (result.HasBody) { if (result.Length > 0) { stream.Write(HeaderTypeFactory.CONTENT_LENGTH_BYTES, 0, HeaderTypeFactory.CONTENT_LENGTH_BYTES.Length); stream.Write(result.Length.ToString()); stream.Write(HeaderTypeFactory.TOW_LINE_BYTES, 0, 4); result.Write(stream, this); } else { stream.Write(HeaderTypeFactory.CONTENT_LENGTH_BYTES, 0, HeaderTypeFactory.CONTENT_LENGTH_BYTES.Length); MemoryBlockCollection contentLength = stream.Allocate(10); stream.Write(HeaderTypeFactory.TOW_LINE_BYTES, 0, 4); int len = stream.CacheLength; result.Write(stream, this); int count = stream.CacheLength - len; //contentLength.Full("Content-Length: " + count.ToString().PadRight(10) + "\r\n\r\n", stream.Encoding); contentLength.Full(count.ToString().PadRight(10), stream.Encoding); } } else { stream.Write(HeaderTypeFactory.NULL_CONTENT_LENGTH_BYTES, 0, HeaderTypeFactory.NULL_CONTENT_LENGTH_BYTES.Length); stream.Write(HeaderTypeFactory.LINE_BYTES, 0, 2); } } } else { stream.Write(HeaderTypeFactory.NULL_CONTENT_LENGTH_BYTES, 0, HeaderTypeFactory.NULL_CONTENT_LENGTH_BYTES.Length); stream.Write(HeaderTypeFactory.LINE_BYTES, 0, 2); } if (Session.Server.EnableLog(EventArgs.LogType.Debug)) { Session.Server.Log(EventArgs.LogType.Debug, Session, "{0} {1}", Request.ClientIPAddress, this.ToString()); } if (Session.Server.EnableLog(EventArgs.LogType.Info)) { Session.Server.Log(EventArgs.LogType.Info, Session, "{4} {0} {1} response {2} {3}", Request.Method, Request.Url, Code, CodeMsg, Request.ClientIPAddress); } }