private byte[] EncodeRedirectionData(RDP_SERVER_REDIRECTION_PACKET serverRedirectionPdu)
{
List<byte> dataBuffer = new List<byte>();
RdpbcgrEncoder.EncodeStructure(dataBuffer, serverRedirectionPdu.Flags);
RdpbcgrEncoder.EncodeStructure(dataBuffer, serverRedirectionPdu.Length);
RdpbcgrEncoder.EncodeStructure(dataBuffer, serverRedirectionPdu.SessionId);
RdpbcgrEncoder.EncodeStructure(dataBuffer, (uint)serverRedirectionPdu.RedirFlags);
if (serverRedirectionPdu.TargetNetAddressLength > 0)
{
RdpbcgrEncoder.EncodeStructure(dataBuffer, serverRedirectionPdu.TargetNetAddressLength);
RdpbcgrEncoder.EncodeBytes(dataBuffer, serverRedirectionPdu.TargetNetAddress);
}
if (serverRedirectionPdu.LoadBalanceInfoLength > 0)
{
RdpbcgrEncoder.EncodeStructure(dataBuffer, serverRedirectionPdu.LoadBalanceInfoLength);
RdpbcgrEncoder.EncodeBytes(dataBuffer, serverRedirectionPdu.LoadBalanceInfo);
}
if (serverRedirectionPdu.UserNameLength > 0)
{
RdpbcgrEncoder.EncodeStructure(dataBuffer, serverRedirectionPdu.UserNameLength);
RdpbcgrEncoder.EncodeBytes(dataBuffer, serverRedirectionPdu.UserName);
}
if (serverRedirectionPdu.DomainLength > 0)
{
RdpbcgrEncoder.EncodeStructure(dataBuffer, serverRedirectionPdu.DomainLength);
RdpbcgrEncoder.EncodeBytes(dataBuffer, serverRedirectionPdu.Domain);
}
if (serverRedirectionPdu.PasswordLength > 0)
{
RdpbcgrEncoder.EncodeStructure(dataBuffer, serverRedirectionPdu.PasswordLength);
RdpbcgrEncoder.EncodeBytes(dataBuffer, serverRedirectionPdu.Password);
}
if (serverRedirectionPdu.TargetFQDNLength > 0)
{
RdpbcgrEncoder.EncodeStructure(dataBuffer, serverRedirectionPdu.TargetFQDNLength);
RdpbcgrEncoder.EncodeBytes(dataBuffer, serverRedirectionPdu.TargetFQDN);
}
if (serverRedirectionPdu.TargetNetBiosNameLength > 0)
{
RdpbcgrEncoder.EncodeStructure(dataBuffer, serverRedirectionPdu.TargetNetBiosNameLength);
RdpbcgrEncoder.EncodeBytes(dataBuffer, serverRedirectionPdu.TargetNetBiosName);
}
if (serverRedirectionPdu.TargetNetAddressesLength > 0)
{
RdpbcgrEncoder.EncodeStructure(dataBuffer, serverRedirectionPdu.TargetNetAddressesLength);
RdpbcgrEncoder.EncodeBytes(dataBuffer, EncodeTargetNetAddresses(serverRedirectionPdu.TargetNetAddresses));
}
RdpbcgrEncoder.EncodeBytes(dataBuffer, serverRedirectionPdu.Pad);
return dataBuffer.ToArray();
}