in FixAntenna/NetCore/FixEngine/Session/MessageHandler/User/DeliverToCompIdMessageHandler.cs [96:197]
private FixMessage PrepareMessageForDelivering(FixMessage message, SessionParameters sessionParameters)
{
//replace sender and target for message
var index = message.GetTagIndex(Tags.SenderCompID);
message.SetAtIndex(index, sessionParameters.SenderCompId);
if (sessionParameters.SenderSubId != null)
{
var tagIndex = message.GetTagIndex(Tags.SenderSubID);
if (tagIndex == FixMessage.NotFound)
{
message.AddTagAtIndex(index++, Tags.SenderSubID, sessionParameters.SenderSubId);
}
else
{
message.SetAtIndex(tagIndex, sessionParameters.SenderSubId);
}
}
else
{
message.RemoveTag(Tags.SenderSubID);
}
if (sessionParameters.SenderLocationId != null)
{
var tagIndex = message.GetTagIndex(Tags.SenderLocationID);
if (tagIndex == FixMessage.NotFound)
{
message.AddTagAtIndex(index++, Tags.SenderLocationID, sessionParameters.SenderLocationId);
}
else
{
message.SetAtIndex(tagIndex, sessionParameters.SenderLocationId);
}
}
else
{
message.RemoveTag(Tags.SenderLocationID);
}
//set values from DeliverToXXX as a target
message.LoadTagValue(Tags.DeliverToCompID, _copiedValue);
_copiedValue.TagId = Tags.TargetCompID;
message.Set(_copiedValue);
index = message.GetTagIndex(Tags.DeliverToSubID);
if (index != FixMessage.NotFound)
{
message.LoadTagValueByIndex(index, _copiedValue);
_copiedValue.TagId = Tags.TargetSubID;
var tagIndex = message.GetTagIndex(Tags.TargetSubID);
if (tagIndex == FixMessage.NotFound)
{
message.AddTagAtIndex(index++, _copiedValue);
}
else
{
message.Set(_copiedValue);
}
}
else
{
message.RemoveTag(Tags.TargetSubID);
}
index = message.GetTagIndex(Tags.DeliverToLocationID);
if (index != FixMessage.NotFound)
{
message.LoadTagValueByIndex(index, _copiedValue);
_copiedValue.TagId = Tags.TargetLocationID;
var tagIndex = message.GetTagIndex(Tags.TargetLocationID);
if (tagIndex == FixMessage.NotFound)
{
message.AddTagAtIndex(index++, _copiedValue);
}
else
{
message.Set(_copiedValue);
}
}
else
{
message.RemoveTag(Tags.TargetLocationID);
}
//replace tags DelivetToXXX with OnBehaltOfXXX
index = message.GetTagIndex(Tags.DeliverToCompID); //replace tag
message.RemoveTagAtIndex(index);
message.AddTagAtIndex(index++, Tags.OnBehalfOfCompID, sessionParameters.TargetCompId);
if (sessionParameters.TargetSubId != null)
{
message.AddTagAtIndex(index++, Tags.OnBehalfOfSubID, sessionParameters.TargetSubId);
}
if (sessionParameters.TargetLocationId != null)
{
message.AddTagAtIndex(index++, Tags.OnBehalfOfLocationID, sessionParameters.TargetLocationId);
}
message.RemoveTag(Tags.DeliverToSubID);
message.RemoveTag(Tags.DeliverToLocationID);
return message;
}