private FixMessage PrepareMessageForDelivering()

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;
		}