示例#1
0
        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);
                }
        }
示例#2
0
        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);
                        }
                }
        }