private void FlushPacket(ServerStsPacket packet) { using (var stream = new MemoryStream()) using (var writer = new StreamWriter(stream)) { writer.Write(packet.Protocol); writer.Write(" "); writer.Write(packet.StatusCode); writer.Write(" "); writer.Write(" "); writer.Write(packet.Status); writer.Write("\r\n"); foreach ((string name, string value) in packet.Headers) { writer.Write($"{name}:{value}"); writer.Write("\r\n"); } writer.Write("\r\n"); writer.Write(packet.Body); writer.Flush(); byte[] buffer = stream.ToArray(); if (packet.Encrypt) { serverEncryption.Encrypt(buffer); } SendRaw(buffer); } log.Trace($"Sent packet response {packet.StatusCode}, {packet.Status}"); }
public void EnqueueMessage(uint statusCode, string status, IWritable message) { var settings = new XmlWriterSettings { OmitXmlDeclaration = true, Indent = true, IndentChars = "", NewLineChars = "\n", Encoding = Encoding.UTF8 }; using (var stringWriter = new StringWriter()) using (var writer = XmlWriter.Create(stringWriter, settings)) { writer.WriteStartDocument(); message.Write(writer); writer.WriteEndDocument(); writer.Flush(); var packet = new ServerStsPacket(statusCode, status, stringWriter.ToString(), sequence, serverEncryption != null); outgoingPackets.Enqueue(packet); } }