{
VerifyMessageVersion (message);
- message.WriteMessage (XmlDictionaryWriter.CreateBinaryWriter (stream, soap_dictionary, CurrentWriterSession));
+ using (var xw = XmlDictionaryWriter.CreateBinaryWriter (stream, soap_dictionary, CurrentWriterSession))
+ message.WriteMessage (xw);
}
[MonoTODO]
+2009-05-27 Atsushi Enomoto <atsushi@ximian.com>
+
+ * BinaryMessageEncoder.cs : the serializer somehow leaves binary
+ xml open, so close the writer as well as open elements.
+ * TcpDuplexSessionChannel.cs : clear write buffer on each operation.
+ Do not output EndRecord and SizedMessage at a time.
+
2009-05-26 Atsushi Enomoto <atsushi@ximian.com>
* TcpDuplexSessionChannel.cs : there was a miscalculation on the
{
this.mode = mode;
this.s = s;
- this.buffer = new MemoryStream ();
reader = new MyBinaryReader (s);
- writer = new MyBinaryWriter (buffer);
+ ResetWriteBuffer ();
EncodingRecord = 8; // FIXME: it should depend on mode.
}
public MessageEncoder Encoder { get; set; }
+ void ResetWriteBuffer ()
+ {
+ this.buffer = new MemoryStream ();
+ writer = new MyBinaryWriter (buffer);
+ }
+
public byte [] ReadSizedChunk ()
{
int length = reader.ReadVariableInt ();
public void ProcessPreambleInitiator ()
{
- buffer.Position = 0;
+ ResetWriteBuffer ();
+
buffer.WriteByte (VersionRecord);
buffer.WriteByte (1);
buffer.WriteByte (0);
buffer.Flush ();
s.Write (buffer.GetBuffer (), 0, (int) buffer.Position);
+ s.Flush ();
int b = s.ReadByte ();
switch (b) {
public void WriteSizedMessage (Message message)
{
- buffer.Position = 0;
+ ResetWriteBuffer ();
// FIXME: implement full [MC-NMF] protocol.
var arr = ms.GetBuffer ();
writer.Write (arr, 0, (int) ms.Position);
- writer.Write (EndRecord);
writer.Flush ();
s.Write (buffer.GetBuffer (), 0, (int) buffer.Position);
+
+ s.WriteByte (EndRecord);
}
public void ProcessEndRecordRecipient ()