Microsoft.Protocols.TestTools.StackSdk.RemoteDesktop.Rdpbcgr.Client_Info_Pdu.EncodeInfoData C# (CSharp) Method

EncodeInfoData() private static method

Encode infoPacket field.
private static EncodeInfoData ( TS_INFO_PACKET infoPacket ) : byte[]
infoPacket TS_INFO_PACKET The data to be encoded.
return byte[]
        private static byte[] EncodeInfoData(TS_INFO_PACKET infoPacket)
        {
            List<byte> infoBuffer = new List<byte>();
            if (infoPacket != null)
            {
                RdpbcgrEncoder.EncodeStructure(infoBuffer, infoPacket.CodePage);
                RdpbcgrEncoder.EncodeStructure(infoBuffer, (uint)infoPacket.flags);
                RdpbcgrEncoder.EncodeStructure(infoBuffer, infoPacket.cbDomain);
                RdpbcgrEncoder.EncodeStructure(infoBuffer, infoPacket.cbUserName);
                RdpbcgrEncoder.EncodeStructure(infoBuffer, infoPacket.cbPassword);
                RdpbcgrEncoder.EncodeStructure(infoBuffer, infoPacket.cbAlternateShell);
                RdpbcgrEncoder.EncodeStructure(infoBuffer, infoPacket.cbWorkingDir);
                if ((infoPacket.flags & flags_Values.INFO_UNICODE) == flags_Values.INFO_UNICODE)
                {
                    // +2 means add a null-terminator for a unicode string
                    RdpbcgrEncoder.EncodeUnicodeString(infoBuffer, infoPacket.Domain, (uint)(infoPacket.cbDomain + 2));
                    RdpbcgrEncoder.EncodeUnicodeString(infoBuffer,
                                                       infoPacket.UserName,
                                                       (uint)(infoPacket.cbUserName + 2));
                    RdpbcgrEncoder.EncodeUnicodeString(infoBuffer,
                                                       infoPacket.Password,
                                                       (uint)(infoPacket.cbPassword + 2));
                    RdpbcgrEncoder.EncodeUnicodeString(infoBuffer,
                                                       infoPacket.AlternateShell,
                                                       (uint)(infoPacket.cbAlternateShell + 2));
                    RdpbcgrEncoder.EncodeUnicodeString(infoBuffer,
                                                       infoPacket.WorkingDir,
                                                       (uint)(infoPacket.cbWorkingDir + 2));
                }
                else
                {
                    // +1 means add a null-terminator for an ansi string
                    RdpbcgrEncoder.EncodeAnsiString(infoBuffer, infoPacket.Domain, (uint)(infoPacket.cbDomain + 1));
                    RdpbcgrEncoder.EncodeAnsiString(infoBuffer,
                                                    infoPacket.UserName,
                                                    (uint)(infoPacket.cbUserName + 1));
                    RdpbcgrEncoder.EncodeAnsiString(infoBuffer,
                                                    infoPacket.Password,
                                                    (uint)(infoPacket.cbPassword + 1));
                    RdpbcgrEncoder.EncodeAnsiString(infoBuffer,
                                                    infoPacket.AlternateShell,
                                                    (uint)(infoPacket.cbAlternateShell + 1));
                    RdpbcgrEncoder.EncodeAnsiString(infoBuffer,
                                                    infoPacket.WorkingDir,
                                                    (uint)(infoPacket.cbWorkingDir + 1));
                }

                if (infoPacket.extraInfo != null)
                {
                    RdpbcgrEncoder.EncodeStructure(infoBuffer, (ushort)infoPacket.extraInfo.clientAddressFamily);
                    RdpbcgrEncoder.EncodeStructure(infoBuffer, infoPacket.extraInfo.cbClientAddress);
                    if ((infoPacket.flags & flags_Values.INFO_UNICODE) == flags_Values.INFO_UNICODE)
                    {
                        RdpbcgrEncoder.EncodeUnicodeString(infoBuffer,
                                                           infoPacket.extraInfo.clientAddress,
                                                           infoPacket.extraInfo.cbClientAddress);
                    }
                    else
                    {
                        RdpbcgrEncoder.EncodeAnsiString(infoBuffer,
                                                        infoPacket.extraInfo.clientAddress,
                                                        infoPacket.extraInfo.cbClientAddress);
                    }

                    RdpbcgrEncoder.EncodeStructure(infoBuffer, infoPacket.extraInfo.cbClientDir);
                    if ((infoPacket.flags & flags_Values.INFO_UNICODE) == flags_Values.INFO_UNICODE)
                    {
                        RdpbcgrEncoder.EncodeUnicodeString(infoBuffer,
                                                           infoPacket.extraInfo.clientDir,
                                                           infoPacket.extraInfo.cbClientDir);
                    }
                    else
                    {
                        RdpbcgrEncoder.EncodeAnsiString(infoBuffer,
                                                        infoPacket.extraInfo.clientDir,
                                                        infoPacket.extraInfo.cbClientDir);
                    }

                    RdpbcgrEncoder.EncodeStructure(infoBuffer, (ushort)infoPacket.extraInfo.clientTimeZone.Bias);
                    RdpbcgrEncoder.EncodeUnicodeString(infoBuffer,
                                                       infoPacket.extraInfo.clientTimeZone.StandardName,
                                                       ConstValue.TIME_ZONE_STANDARD_NAME_SIZE);
                    RdpbcgrEncoder.EncodeStructure(infoBuffer, infoPacket.extraInfo.clientTimeZone.StandardDate);
                    RdpbcgrEncoder.EncodeStructure(infoBuffer, infoPacket.extraInfo.clientTimeZone.StandardBias);
                    RdpbcgrEncoder.EncodeUnicodeString(infoBuffer,
                                                       infoPacket.extraInfo.clientTimeZone.DaylightName,
                                                       ConstValue.TIME_ZONE_DAYLIGHT_NAME_SIZE);
                    RdpbcgrEncoder.EncodeStructure(infoBuffer, infoPacket.extraInfo.clientTimeZone.DaylightDate);
                    RdpbcgrEncoder.EncodeStructure(infoBuffer, infoPacket.extraInfo.clientTimeZone.DaylightBias);

                    RdpbcgrEncoder.EncodeStructure(infoBuffer, infoPacket.extraInfo.clientSessionId);
                    RdpbcgrEncoder.EncodeStructure(infoBuffer, (uint)infoPacket.extraInfo.performanceFlags);
                    RdpbcgrEncoder.EncodeStructure(infoBuffer, infoPacket.extraInfo.cbAutoReconnectLen);

                    if (infoPacket.extraInfo.cbAutoReconnectLen != 0)
                    {
                        RdpbcgrEncoder.EncodeStructure(infoBuffer,
                                                       (uint)infoPacket.extraInfo.autoReconnectCookie.cbLen);
                        RdpbcgrEncoder.EncodeStructure(infoBuffer,
                                                       (uint)infoPacket.extraInfo.autoReconnectCookie.Version);
                        RdpbcgrEncoder.EncodeStructure(infoBuffer, infoPacket.extraInfo.autoReconnectCookie.LogonId);
                        RdpbcgrEncoder.EncodeBytes(infoBuffer,
                                                   infoPacket.extraInfo.autoReconnectCookie.SecurityVerifier); ;
                    }

                    if (infoPacket.extraInfo.reserved1 != null)
                    {
                        RdpbcgrEncoder.EncodeStructure(infoBuffer, infoPacket.extraInfo.reserved1.actualData);
                    }

                    if (infoPacket.extraInfo.reserved2 != null)
                    {
                        RdpbcgrEncoder.EncodeStructure(infoBuffer, infoPacket.extraInfo.reserved2.actualData);
                    }

                    if (infoPacket.extraInfo.cbDynamicDSTTimeZoneKeyName != null)
                    {
                        RdpbcgrEncoder.EncodeStructure(infoBuffer, infoPacket.extraInfo.cbDynamicDSTTimeZoneKeyName.actualData);
                    }

                    if (infoPacket.extraInfo.dynamicDSTTimeZoneKeyName != null)
                    {
                        RdpbcgrEncoder.EncodeUnicodeString(infoBuffer,
                                                           infoPacket.extraInfo.dynamicDSTTimeZoneKeyName,
                                                           infoPacket.extraInfo.cbDynamicDSTTimeZoneKeyName.actualData);
                    }

                    if (infoPacket.extraInfo.dynamicDaylightTimeDisabled != null)
                    {
                        RdpbcgrEncoder.EncodeStructure(infoBuffer, infoPacket.extraInfo.dynamicDaylightTimeDisabled.actualData);
                    }
                }
            }

            return infoBuffer.ToArray();
        }