示例#1
0
文件: SNAC15.cs 项目: pkt30/OscarLib
        public static void ProcessInfoResponse(DataPacket dp)
        {
            // The first four bytes of this are the TLV 0x0001
            // header which encapsulates the rest of the data
            int index = 4;

            ushort cmdlength = dp.Data.ReadUshortLE();
            uint my_uin = dp.Data.ReadUintLE();
            ushort command = dp.Data.ReadUshortLE();
            ushort requestID = dp.Data.ReadUshortLE();

            Encoding enc = Encoding.ASCII;

            switch (command)
            {
                case 0x0041:
                    break;
                case 0x0042:
                    // Gaim does a callback here
                    break;
                case 0x07DA:
                    ICQInfo info = new ICQInfo();
                    // RecallICQInfo(requestid)
                    ushort subtype = dp.Data.ReadUshortLE();
                    index++; // 0x0A
                    switch (subtype)
                    {
                        case 0x00A0:
                            break;
                        case 0x00AA:
                            break;
                        case 0x00C8:
                            info.Nickname = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                            info.Firstname = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                            info.Lastname = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                            info.Email = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                            info.HomeCity = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                            info.HomeState = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                            info.HomePhone = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                            info.HomeFax = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                            info.HomeAddress = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                            info.MobilePhone = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                            info.HomeZip = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                            info.HomeCountry = dp.Data.ReadUshortLE();
                            break;
                        case 0x00DC:
                            info.Age = dp.Data.ReadByte();
                            index++; // unknown
                            info.Gender = dp.Data.ReadByte();
                            info.PersonalURL = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                            info.BirthYear = dp.Data.ReadUshortLE();
                            info.BirthMonth = dp.Data.ReadByte();
                            info.BirthDay = dp.Data.ReadByte();
                            info.Language1 = dp.Data.ReadByte();
                            info.Language2 = dp.Data.ReadByte();
                            info.Language3 = dp.Data.ReadByte();
                            break;
                        case 0x00D2:
                            info.WorkCity = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                            info.WorkState = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                            info.WorkPhone = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                            info.WorkFax = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                            info.WorkAddress = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                            info.WorkZip = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                            info.WorkCountry = dp.Data.ReadUshortLE();
                            info.WorkCompany = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                            info.WorkDivision = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                            info.WorkPosition = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                            index += 2;
                            info.WorkWebsite = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                            break;
                        case 0x00E6:
                            info.Information = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                            break;
                        case 0x00EB:
                            ushort numaddresses = dp.Data.ReadUshortLE();
                            info.EmailAddresses = new string[numaddresses];
                            for (int i = 0; i < numaddresses; i++)
                            {
                                info.EmailAddresses[i] = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                                if (i + 1 != numaddresses)
                                    index++;
                            }
                            break;
                        case 0x00F0:
                            break;
                        case 0x00FA:
                            break;
                        case 0x0104:
                            info.Nickname = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                            info.Firstname = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                            info.Lastname = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);

                            break;
                        case 0x010E:
                            break;
                        case 0x019A:
                            index += 2;
                            info.Screenname = dp.Data.ReadUintLE().ToString();
                            info.Nickname = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                            info.Firstname = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                            info.Lastname = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                            info.Email = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                            break;
                    } // End the subtype switch statement
                    break;

                    // Do some crazy multipart snac stuff
                default:
                    index += cmdlength;
                    break;
            }
        }
示例#2
0
        public static void ProcessInfoResponse(DataPacket dp)
        {
            // The first four bytes of this are the TLV 0x0001
            // header which encapsulates the rest of the data
            int index = 4;

            ushort cmdlength = dp.Data.ReadUshortLE();
            uint   my_uin    = dp.Data.ReadUintLE();
            ushort command   = dp.Data.ReadUshortLE();
            ushort requestID = dp.Data.ReadUshortLE();

            Encoding enc = Encoding.ASCII;

            switch (command)
            {
            case 0x0041:
                break;

            case 0x0042:
                // Gaim does a callback here
                break;

            case 0x07DA:
                ICQInfo info = new ICQInfo();
                // RecallICQInfo(requestid)
                ushort subtype = dp.Data.ReadUshortLE();
                index++;     // 0x0A
                switch (subtype)
                {
                case 0x00A0:
                    break;

                case 0x00AA:
                    break;

                case 0x00C8:
                    info.Nickname    = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                    info.Firstname   = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                    info.Lastname    = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                    info.Email       = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                    info.HomeCity    = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                    info.HomeState   = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                    info.HomePhone   = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                    info.HomeFax     = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                    info.HomeAddress = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                    info.MobilePhone = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                    info.HomeZip     = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                    info.HomeCountry = dp.Data.ReadUshortLE();
                    break;

                case 0x00DC:
                    info.Age = dp.Data.ReadByte();
                    index++;         // unknown
                    info.Gender      = dp.Data.ReadByte();
                    info.PersonalURL = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                    info.BirthYear   = dp.Data.ReadUshortLE();
                    info.BirthMonth  = dp.Data.ReadByte();
                    info.BirthDay    = dp.Data.ReadByte();
                    info.Language1   = dp.Data.ReadByte();
                    info.Language2   = dp.Data.ReadByte();
                    info.Language3   = dp.Data.ReadByte();
                    break;

                case 0x00D2:
                    info.WorkCity     = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                    info.WorkState    = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                    info.WorkPhone    = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                    info.WorkFax      = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                    info.WorkAddress  = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                    info.WorkZip      = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                    info.WorkCountry  = dp.Data.ReadUshortLE();
                    info.WorkCompany  = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                    info.WorkDivision = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                    info.WorkPosition = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                    index            += 2;
                    info.WorkWebsite  = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                    break;

                case 0x00E6:
                    info.Information = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                    break;

                case 0x00EB:
                    ushort numaddresses = dp.Data.ReadUshortLE();
                    info.EmailAddresses = new string[numaddresses];
                    for (int i = 0; i < numaddresses; i++)
                    {
                        info.EmailAddresses[i] = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                        if (i + 1 != numaddresses)
                        {
                            index++;
                        }
                    }
                    break;

                case 0x00F0:
                    break;

                case 0x00FA:
                    break;

                case 0x0104:
                    info.Nickname  = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                    info.Firstname = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                    info.Lastname  = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);

                    break;

                case 0x010E:
                    break;

                case 0x019A:
                    index          += 2;
                    info.Screenname = dp.Data.ReadUintLE().ToString();
                    info.Nickname   = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                    info.Firstname  = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                    info.Lastname   = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                    info.Email      = dp.Data.ReadString(dp.Data.ReadUshortLE(), Encoding.ASCII);
                    break;
                }     // End the subtype switch statement
                break;

            // Do some crazy multipart snac stuff
            default:
                index += cmdlength;
                break;
            }
        }