|
From: not_a_commie on 10 Oct 2008 17:23 I was trying to write my own MessageEncoder but I can't even deserialize a message body. Can somebody fill in the comment (containing FREAK) in the code below? Thanks. [Test] public void TestEncoder() { var rand = new Random(1); var points = 10; var list1 = new List<int>(points); for (int i = 0; i < points; i++) list1.Add(rand.Next() >> 4); // at least 4 compressable bits out of 32! var msg = Message.CreateMessage(MessageVersion.Default, "*", list1); var bufMgr = BufferManager.CreateBufferManager(int.MaxValue, 1<<25); // 32MB var encoder = new CompressionEncoderFactory.CompressionEncoder(CompressionMode.Deflate, new BasicMessageEncoder()); var arr = encoder.WriteMessage(msg, int.MaxValue, bufMgr, 0); var res = encoder.ReadMessage(arr, bufMgr); var list2 = res.GetBody<List<int>>(); for (int i = 0; i < points; i++) Assert.AreEqual(list1[i], list2[i]); } internal class BasicMessageEncoder : MessageEncoder { public override Message ReadMessage(Stream stream, int maxSizeOfHeaders, string contentType) { using (var reader = XmlDictionaryReader.CreateTextReader(stream, Encoding.UTF8, XmlDictionaryReaderQuotas.Max, null)) return Message.CreateMessage(reader, maxSizeOfHeaders, MessageVersion); } public override Message ReadMessage(ArraySegment<byte> buffer, BufferManager bufferManager, string contentType) { Message header, full; using (var reader = XmlDictionaryReader.CreateTextReader(buffer.Array, buffer.Offset, buffer.Count, Encoding.UTF8, XmlDictionaryReaderQuotas.Max, null)) { header = Message.CreateMessage(reader, int.MaxValue, MessageVersion); // WHAT the FREAK goes here to fill in the message body? the above only reads the headers... } bufferManager.ReturnBuffer(buffer.Array); return full; } public override void WriteMessage(Message message, Stream stream) { using (var writer = XmlDictionaryWriter.CreateTextWriter(stream, Encoding.UTF8, false)) message.WriteMessage(writer); } public override ArraySegment<byte> WriteMessage(Message message, int maxMessageSize, BufferManager bufferManager, int messageOffset) { ArraySegment<byte> ret; using (var stream = new MemoryStream()) { using (var writer = XmlDictionaryWriter.CreateTextWriter(stream, Encoding.UTF8, false)) message.WriteMessage(writer); var bytes = stream.ToArray(); var buffer = bufferManager.TakeBuffer(bytes.Length + messageOffset); Array.Copy(bytes, 0, buffer, messageOffset, bytes.Length); ret = new ArraySegment<byte>(buffer, messageOffset, bytes.Length); } return ret; } public override string ContentType { get { return "application/soap"; } } public override string MediaType { get { return "application/soap"; } } public override MessageVersion MessageVersion { get { return MessageVersion.Default; } } }
|
Pages: 1 Prev: VMWare and Wireless Internet Connection Next: Access ftp using app pool identity with C# |