public void SendOkReplyStream(MemoryStream dataStream) { using (MemoryStream packetStream = new MemoryStream()) using (StreamWriter writer = new StreamWriter(packetStream)) { // write headers. writer.WriteLine("STS/1.0 200 OK"); writer.WriteLine("l:{0}", dataStream.Length + 1); writer.WriteLine("s:{0}R", LastRequestId); writer.WriteLine(); writer.Flush(); // copy xml data to stream. dataStream.WriteTo(packetStream); // HTTP content ends with a single \n writer.Write('\n'); writer.Flush(); // apply encryption if active. if (CryptOut != null) { CryptOut.EncryptBuffer(packetStream.GetBuffer(), 0, packetStream.Length); } // test output //Logs.Log(Encoding.UTF8.GetString(packetStream.GetBuffer(), 0, (int)packetStream.Length)); SendMessage(packetStream); } }
public void SendOkReply(StsCommand cmd) { /* With the current implementation it is necessary to make two streams if we want the xml data length. * (the client absolutely requires that the 'l' and 's' headers be exact) */ // todo: make this static? XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = false; settings.Encoding = Encoding.UTF8; settings.OmitXmlDeclaration = true; using (MemoryStream dataStream = new MemoryStream()) using (XmlWriter xmlWriter = XmlWriter.Create(dataStream, settings)) { // serialize the command to xml. cmd.WriteTo(xmlWriter); xmlWriter.Flush(); using (MemoryStream packetStream = new MemoryStream()) using (StreamWriter writer = new StreamWriter(packetStream)) { // write headers. writer.WriteLine("STS/1.0 200 OK"); writer.WriteLine("l:{0}", dataStream.Length + 1); writer.WriteLine("s:{0}R", LastRequestId); writer.WriteLine(); writer.Flush(); // copy xml data to stream. dataStream.WriteTo(packetStream); // HTTP content ends with a single \n writer.Write('\n'); writer.Flush(); // apply encryption if active. if (CryptOut != null) { CryptOut.EncryptBuffer(packetStream.GetBuffer(), 0, packetStream.Length); } // test output //Logs.Log(Encoding.UTF8.GetString(packetStream.GetBuffer(), 0, (int)packetStream.Length)); SendMessage(packetStream); } } }