in FixAntenna/NetCore/FixEngine/Session/Impl/StandardMessageFactory.cs [324:394]
private void SerializeWithAddedHeaderAndTrailerWithoutMessageTypeField(FixMessage fixMessage, ByteBuffer buffer, SerializationContext context)
{
var length = _senderTargetHeader.Length;
byte[] loginHeader = null;
var msgType = fixMessage.MsgType;
var isLogon = RawFixUtil.IsLogon(msgType);
if (isLogon)
{
if (_logonCustomizationStrategy != null)
{
Log.Warn("logonCustomizationStrategy has been set but changesType provided does not support it (only update is supported).");
}
loginHeader = GetLoginHeader();
length += loginHeader.Length;
}
length += fixMessage.RawLength;
var outSeqNum = RuntimeState.OutSeqNum;
var outSeqNumLen = FixTypes.GetSeqNumLength(outSeqNum, MinSeqNumFieldsLength);
length += SeqNumTagValue.Length + SohLength + outSeqNumLen; // out sequence
var inSeqNum = RuntimeState.InSeqNum - 1;
if (IncludeLastProcessed)
{
//FIXME_NOW: add method for this value
var inSeqNumLen = FixTypes.GetSeqNumLength(inSeqNum, MinSeqNumFieldsLength);
length += LastProcessedTagValue.Length + SohLength + inSeqNumLen; // in sequence
}
length += SohLength + SendingTimeTagValue.Length + context.FormatLength; // sending time
var msgLength = length;
length += CheckSumFieldLength + FixTypes.FormatIntLength(msgLength) + SeparatorLength + _beginStringBodyLengthHeader.Length;
if (!buffer.IsAvailable(length))
{
buffer.IncreaseBuffer(length);
}
var offset = buffer.Offset;
buffer.Add(_beginStringBodyLengthHeader); // msg version + part of msg length
buffer.AddLikeString((long) msgLength);
buffer.Add(SeparatorByte);
buffer.Add(MsgTypeTagValue); // 35=
buffer.Add(msgType); // msg type
buffer.Add(SeparatorByte);
buffer.Add(SeqNumTagValue);
buffer.AddLikeString(outSeqNum, MinSeqNumFieldsLength);
buffer.Add(SeparatorByte);
buffer.Add(_senderTargetHeader);
if (IncludeLastProcessed)
{
buffer.Add(LastProcessedTagValue);
buffer.AddLikeString(inSeqNum, MinSeqNumFieldsLength);
buffer.Add(SeparatorByte);
}
var sendingTime = context.CurrentDateValue;
buffer.Add(SendingTimeTagValue);
buffer.Add(sendingTime);
buffer.Add(SeparatorByte);
if (isLogon)
{
buffer.Add(loginHeader);
}
buffer.Offset = fixMessage.ToByteArrayAndReturnNextPosition(buffer.GetByteArray(), buffer.Offset, ExcludedFields);
if (!buffer.IsAvailable(CheckSumFieldLength))
{
buffer.IncreaseBuffer(CheckSumFieldLength);
}
WriteChecksumField(buffer.GetByteArray(), offset, buffer.Offset - offset);
buffer.Offset = buffer.Offset + CheckSumFieldLength;
}