protected override void OnOpen (TimeSpan timeout)
{
+ CreateClient (timeout);
}
void CreateClient (TimeSpan timeout)
Encoder = this.Encoder,
Via = this.Via,
EncodingRecord = TcpBinaryFrameManager.EncodingBinary };
- frame.ProcessPreambleInitiator ();
- frame.ProcessPreambleAckInitiator ();
}
public override Message Request (Message input, TimeSpan timeout)
{
DateTime start = DateTime.Now;
- CreateClient (timeout);
+ // FIXME: use timeouts.
+ frame.ProcessPreambleInitiator ();
+ frame.ProcessPreambleAckInitiator ();
if (input.Headers.To == null)
input.Headers.To = RemoteAddress.Uri;
frame.WriteUnsizedMessage (input, timeout - (DateTime.Now - start));
- // It somehow sends EndRecord now ...
- frame.ProcessEndRecordInitiator ();
+ // LAMESPEC: it contradicts the protocol described at section 3.1.1.1.1 in [MC-NMF].
+ // Moving this WriteEndRecord() after ReadUnsizedMessage() causes TCP connection blocking.
+ frame.WriteEndRecord ();
var ret = frame.ReadUnsizedMessage (timeout - (DateTime.Now - start));
- frame.ProcessEndRecordRecipient (); // both
+ frame.ReadEndRecord (); // both
return ret;
}
}