Exemplo n.º 1
0
        /// <summary>
        /// Reads a <see cref="UserInfo"/> from the stream
        /// </summary>
        public UserInfo ReadUserInfo()
        {
            UserInfo retval = new UserInfo();

            byte screenNameLength = ReadByte();

            if (screenNameLength == 0)
            {
                return(null);
            }
            retval.ScreenName   = ReadString(screenNameLength, Encoding.ASCII);
            retval.WarningLevel = ReadUshort();
            using (TlvBlock tlvBlock = ReadTlvBlock(ReadUshort()))
            {
                retval.Class      = (UserClass)tlvBlock.ReadUshort(0x0001);
                retval.CreateTime = tlvBlock.ReadDateTime(0x0002);
                retval.SignonTime = tlvBlock.ReadDateTime(0x0003);
                retval.IdleTime   = tlvBlock.ReadUshort(0x0004);
                if (retval.IdleTime == 0xFFFF)
                {
                    retval.IdleTime = 0;
                }
                retval.RegisterTime      = tlvBlock.ReadDateTime(0x0005);
                retval.ICQUserStatus     = tlvBlock.ReadUint(0x0006);
                retval.ExternalIPAddress = tlvBlock.ReadUint(0x000A);
                // Read the DC info from 0x000C
                retval.ClientCapabilities = CapabilityProcessor.ProcessCLSIDList(tlvBlock.ReadByteArray(0x000D));
                retval.OnlineTime         = tlvBlock.ReadUint(0x000F);
                if (tlvBlock.HasTlv(0x001D))
                {
                    ReadIconInfo(tlvBlock.ReadByteArray(0x001D), retval);
                }
            }

            return(retval);
        }