Esempio n. 1
0
        public HChatRecordData(HMessage packet)
        {
            object ReadContextValue(HMessage anotherMessage)
            {
                switch (anotherMessage.ReadShort())
                {
                case 0: return(anotherMessage.ReadBoolean());

                case 1: return(anotherMessage.ReadInt32());

                case 2: return(anotherMessage.ReadUTF8());

                default: throw new System.Exception("Nothing");
                }
            }

            Type = (HChatRecordType)packet.ReadBytes(1)[0];
            int entryCount = packet.ReadShort();

            Context = new Dictionary <string, object>(entryCount);
            for (int i = 0; i < entryCount; i++)
            {
                Context.Add(packet.ReadUTF8(), ReadContextValue(packet));
            }

            Chatlogs = new List <HChatlineData>(packet.ReadShort());
            for (int i = 0; i < Chatlogs.Capacity; i++)
            {
                Chatlogs.Add(new HChatlineData(packet));
            }
        }
Esempio n. 2
0
        public ExtensionForm()
        {
            Triggers = new HTriggers(false);
            var extensionAssembly = Assembly.GetCallingAssembly();

            ExtensionInfo extensionInfo =
                Contractor.GetExtensionInfo(extensionAssembly);

            if (IsInstalled = (extensionInfo != null))
            {
                _contractor = extensionInfo.Contractor;

                Hash         = extensionInfo.Hash;
                FileLocation = extensionInfo.FileLocation;

                var fileInfo = FileVersionInfo.GetVersionInfo(FileLocation);
                Version     = new Version(fileInfo.ProductVersion);
                Identifier  = fileInfo.FileDescription;
                Description = fileInfo.Comments;
                Creator     = fileInfo.CompanyName;
            }
            else if (IsExternal)
            {
                _contractor = new Contractor();
                var externalContractor = HNode.ConnectAsync("127.0.0.1", 8787).Result;

                HMessage initializationMessage = externalContractor.ReceiveAsync().Result;
                _contractor.Hotel = (HHotel)initializationMessage.ReadShort();

                _contractor.GameData          = new HGameData(initializationMessage.ReadString());
                _contractor.GameData.UniqueId = initializationMessage.ReadString();

                _contractor.Connection = new ExtensionBridge(externalContractor, this);
            }
        }
Esempio n. 3
0
        public HEntity(HMessage packet)
        {
            Id       = packet.ReadInteger();
            Name     = packet.ReadString();
            Motto    = packet.ReadString();
            FigureId = packet.ReadString();
            Index    = packet.ReadInteger();

            Tile = new HPoint(packet.ReadInteger(), packet.ReadInteger(),
                              double.Parse(packet.ReadString(), CultureInfo.InvariantCulture));

            packet.ReadInteger();
            int type = packet.ReadInteger();

            switch (type)
            {
            case 1:
            {
                Gender = SKore.ToGender(packet.ReadString());
                packet.ReadInteger();
                packet.ReadInteger();
                FavoriteGroup = packet.ReadString();
                packet.ReadString();
                packet.ReadInteger();
                packet.ReadBoolean();

                break;
            }

            case 2:
            {
                packet.ReadInteger();
                packet.ReadInteger();
                packet.ReadString();
                packet.ReadInteger();
                packet.ReadBoolean();
                packet.ReadBoolean();
                packet.ReadBoolean();
                packet.ReadBoolean();
                packet.ReadBoolean();
                packet.ReadBoolean();
                packet.ReadInteger();
                packet.ReadString();
                break;
            }

            case 4:
            {
                packet.ReadString();
                packet.ReadInteger();
                packet.ReadString();
                for (int j = packet.ReadInteger(); j > 0; j--)
                {
                    packet.ReadShort();
                }
                break;
            }
            }
        }
Esempio n. 4
0
        public async Task RequestInformationAsync()
        {
            HMessage connectionMessage = await _externalContractor
                                         .ReceiveAsync().ConfigureAwait(false);

            Port    = connectionMessage.ReadShort();
            Host    = connectionMessage.ReadString();
            Address = connectionMessage.ReadString();
        }
Esempio n. 5
0
        public HFriends(HMessage packet)
        {
            Id       = packet.ReadInteger();
            Username = packet.ReadString();
            Gender   = (packet.ReadInteger() == 1 ? HGender.Male : HGender.Female);

            IsOnline   = packet.ReadBoolean();
            CanFollow  = packet.ReadBoolean();
            Figure     = packet.ReadString();
            CategoryId = packet.ReadInteger();
            Motto      = packet.ReadString();
            RealName   = packet.ReadString();
            packet.ReadString();

            IsPersisted = packet.ReadBoolean();
            packet.ReadBoolean();
            IsPocketHabboUser  = packet.ReadBoolean();
            RelationshipStatus = (HRelationship)packet.ReadShort();
        }
Esempio n. 6
0
        private bool AttemptHandshake(HMessage packet)
        {
            int    position = 0;
            Bitmap banner = null;
            string signedPrime = null, signedGenerator = null, token = null;

            if (packet.Length > (packet.ReadShort(0) + 5))
            {
                signedPrime     = packet.ReadString(ref position);
                signedGenerator = packet.ReadString(ref position);
            }
            else if (!string.IsNullOrWhiteSpace(BannerUrl))
            {
                token  = packet.ReadString(ref position);
                banner = GetHotelBanner(BannerUrl, Cookies, UserAgent);
            }

            return(RsaKeyVerifier(_fakeClient, signedPrime, signedGenerator, banner, token));
        }
Esempio n. 7
0
        /// <summary>
        /// Returns a <see cref="IReadOnlyList{T}"/> of type <see cref="HEntity"/> found in the <see cref="HMessage"/>.
        /// </summary>
        /// <param name="packet">The <see cref="HMessage"/> that contains the <see cref="HEntity"/> data to parse.</param>
        /// <returns></returns>
        public static IReadOnlyList <HEntity> Parse(HMessage packet)
        {
            int entityCount = packet.ReadInteger();
            var entityList  = new List <HEntity>(entityCount);

            for (int i = 0; i < entityList.Capacity; i++)
            {
                int    id       = packet.ReadInteger();
                string name     = packet.ReadString();
                string motto    = packet.ReadString();
                string figureId = packet.ReadString();
                int    index    = packet.ReadInteger();
                int    x        = packet.ReadInteger();
                int    y        = packet.ReadInteger();
                double z        = double.Parse(packet.ReadString());

                packet.ReadInteger();
                int type = packet.ReadInteger();

                HGender gender        = HGender.Unknown;
                string  favoriteGroup = string.Empty;
                #region Switch Statement: type
                switch (type)
                {
                case 1:
                {
                    gender = SKore.ToGender(packet.ReadString());
                    packet.ReadInteger();
                    packet.ReadInteger();
                    favoriteGroup = packet.ReadString();
                    packet.ReadString();
                    packet.ReadInteger();
                    packet.ReadBoolean();

                    break;
                }

                case 2:
                {
                    packet.ReadInteger();
                    packet.ReadInteger();
                    packet.ReadString();
                    packet.ReadInteger();
                    packet.ReadBoolean();
                    packet.ReadBoolean();
                    packet.ReadBoolean();
                    packet.ReadBoolean();
                    packet.ReadBoolean();
                    packet.ReadBoolean();
                    packet.ReadInteger();
                    packet.ReadString();
                    break;
                }

                case 4:
                {
                    packet.ReadString();
                    packet.ReadInteger();
                    packet.ReadString();

                    for (int j = packet.ReadInteger(); j > 0; j--)
                    {
                        packet.ReadShort();
                    }

                    break;
                }
                }
                #endregion

                var entity = new HEntity(id, index, name,
                                         new HPoint(x, y, z), motto, gender, figureId, favoriteGroup);

                entityList.Add(entity);
            }

            return(entityList);
        }
Esempio n. 8
0
        private async Task ReceiveRemoteContractorDataAsync()
        {
            try
            {
                HMessage packet = await _remoteContractor.ReceivePacketAsync().ConfigureAwait(false);

                if (packet == null)
                {
                    Environment.Exit(0);
                }
                #region Switch: packet.Header
                switch (packet.Header)
                {
                case 0:
                {
                    _initStep++;
                    _hotel = (HHotel)packet.ReadShort();
                    break;
                }

                case 1:
                {
                    _initStep++;
                    _in  = new Incoming();
                    _out = new Outgoing();

                    string location = packet.ReadString();
                    if (!string.IsNullOrWhiteSpace(location))
                    {
                        _game = new HGame(location);
                        _game.Disassemble();

                        _game.GenerateMessageHashes();
                        if (packet.Readable > 0)
                        {
                            string hashesPath = packet.ReadString();
                            _in.Load(_game, hashesPath);
                            _out.Load(_game, hashesPath);
                        }
                        _module.ModifyGame(_game);
                    }
                    break;
                }

                case 2:
                {
                    _initStep++;
                    _gameData = new HGameData(packet.ReadString());
                    _module.ModifyGameData(_gameData);
                    break;
                }

                case 3:
                {
                    _initStep++;
                    var connection = (ContractorProxy)_connection;
                    connection.Port    = packet.ReadShort();
                    connection.Host    = packet.ReadString();
                    connection.Address = packet.ReadString();
                    break;
                }

                case 4:
                case 5:
                {
                    var destination = (HDestination)(packet.Header - 4);

                    string stamp       = packet.ReadString();
                    int    step        = packet.ReadInteger();
                    bool   isBlocked   = packet.ReadBoolean();
                    int    dataLength  = packet.ReadInteger();
                    byte[] data        = packet.ReadBytes(dataLength);
                    var    interPacket = new HMessage(data, destination);

                    var args = new DataInterceptedEventArgs(interPacket, step, (destination == HDestination.Server));
                    try
                    {
                        if (destination == HDestination.Server)
                        {
                            _module.HandleOutgoing(args);
                        }
                        else
                        {
                            _module.HandleIncoming(args);
                        }
                    }
                    finally
                    {
                        await SendInterceptedDataResponseAsync(
                            stamp, args).ConfigureAwait(false);
                    }
                    break;
                }
                }
                #endregion

                if (_initStep == 4)
                {
                    _initializationSource?.SetResult(true);
                }
            }
            finally
            {
                Task receiveRemContDataTask = ReceiveRemoteContractorDataAsync();
            }
        }
Esempio n. 9
0
        /// <summary>
        /// Returns a <see cref="IReadOnlyList{T}"/> of type <see cref="HEntity"/> found in the <see cref="HMessage"/>.
        /// </summary>
        /// <param name="packet">The <see cref="HMessage"/> that contains the <see cref="HEntity"/> data to parse.</param>
        /// <returns></returns>
        public static IReadOnlyList<HEntity> Parse(HMessage packet)
        {
            int entityCount = packet.ReadInteger();
            var entityList = new List<HEntity>(entityCount);

            for (int i = 0; i < entityList.Capacity; i++)
            {
                int id = packet.ReadInteger();
                string name = packet.ReadString();
                string motto = packet.ReadString();
                string figureId = packet.ReadString();
                int index = packet.ReadInteger();
                int x = packet.ReadInteger();
                int y = packet.ReadInteger();
                double z = double.Parse(packet.ReadString());

                packet.ReadInteger();
                int type = packet.ReadInteger();

                HGender gender = HGender.Unknown;
                string favoriteGroup = string.Empty;
                #region Switch Statement: type
                switch (type)
                {
                    case 1:
                    {
                        gender = SKore.ToGender(packet.ReadString());
                        packet.ReadInteger();
                        packet.ReadInteger();
                        favoriteGroup = packet.ReadString();
                        packet.ReadString();
                        packet.ReadInteger();
                        packet.ReadBoolean();

                        break;
                    }
                    case 2:
                    {
                        packet.ReadInteger();
                        packet.ReadInteger();
                        packet.ReadString();
                        packet.ReadInteger();
                        packet.ReadBoolean();
                        packet.ReadBoolean();
                        packet.ReadBoolean();
                        packet.ReadBoolean();
                        packet.ReadBoolean();
                        packet.ReadBoolean();
                        packet.ReadInteger();
                        packet.ReadString();
                        break;
                    }
                    case 4:
                    {
                        packet.ReadString();
                        packet.ReadInteger();
                        packet.ReadString();

                        for (int j = packet.ReadInteger(); j > 0; j--)
                            packet.ReadShort();

                        break;
                    }
                }
                #endregion

                var entity = new HEntity(id, index, name,
                    new HPoint(x, y, z), motto, gender, figureId, favoriteGroup);

                entityList.Add(entity);
            }

            return entityList;
        }
Esempio n. 10
0
        public static IList <IHPlayerData> Extract(HMessage packet)
        {
            int    playerId, playerIndex, playerType, x, y, position = 0;
            string playerName, figureId, motto, gender, groupName, z;
            var    playerDataList = new List <IHPlayerData>(packet.ReadInt(ref position));

            do
            {
                playerId   = playerIndex = playerType = x = y = 0;
                playerName = figureId = motto = gender = groupName = z = string.Empty;

                playerId    = packet.ReadInt(ref position);
                playerName  = packet.ReadString(ref position);
                motto       = packet.ReadString(ref position);
                figureId    = packet.ReadString(ref position);
                playerIndex = packet.ReadInt(ref position);
                x           = packet.ReadInt(ref position);
                y           = packet.ReadInt(ref position);
                z           = packet.ReadString(ref position);
                packet.ReadInt(ref position);
                playerType = packet.ReadInt(ref position);

                if (playerType != 1)
                {
                    playerDataList.Capacity--;
                }

                switch (playerType)
                {
                case 1:
                {
                    gender = packet.ReadString(ref position);
                    packet.ReadInt(ref position);
                    packet.ReadInt(ref position);
                    groupName = packet.ReadString(ref position);
                    packet.ReadString(ref position);
                    packet.ReadInt(ref position);
                    packet.ReadBool(ref position);

                    playerDataList.Add(new HPlayerData(playerName, playerId, playerIndex,
                                                       new HPoint(x, y, z), figureId, motto, SKore.ToGender(gender), groupName));
                    break;
                }

                case 2:
                {
                    packet.ReadInt(ref position);
                    packet.ReadInt(ref position);
                    packet.ReadString(ref position);
                    packet.ReadInt(ref position);
                    packet.ReadBool(ref position);
                    packet.ReadBool(ref position);
                    packet.ReadBool(ref position);
                    packet.ReadBool(ref position);
                    packet.ReadBool(ref position);
                    packet.ReadBool(ref position);
                    packet.ReadInt(ref position);
                    packet.ReadString(ref position);
                    break;
                }

                case 4:
                {
                    packet.ReadString(ref position);
                    packet.ReadInt(ref position);
                    packet.ReadString(ref position);
                    for (int i = packet.ReadInt(ref position); i > 0; i--)
                    {
                        packet.ReadShort(ref position);
                    }
                    break;
                }
                }
            }while (playerDataList.Count < playerDataList.Capacity);
            return(playerDataList);
        }
Esempio n. 11
0
        public static void AppendPacketStructure(StringBuilder sb, HMessage packet, StructureType[] structure)
        {
            int originalPosition = packet.Position;

            try
            {
                packet.Position = 0;

                for (int i = 0; i < structure.Length; i++)
                {
                    sb.Append(" ");

                    switch (structure[i])
                    {
                    case StructureType.Boolean:
                        sb.Append(packet.ReadBoolean() ? "true" : "false");
                        break;

                    case StructureType.Byte:
                        sb.Append($"b:{packet.ReadBytes(1)[0]}");
                        break;

                    case StructureType.Short:
                        sb.Append($"s:{(short)packet.ReadShort()}");
                        break;

                    case StructureType.Integer:
                        sb.Append($"{packet.ReadInteger()}");
                        break;

                    case StructureType.String:
                        sb.Append($"\"{EscapeString(packet.ReadString())}\"");
                        break;

                    case StructureType.ByteArray:
                        int    len   = packet.ReadInteger();
                        byte[] bytes = packet.ReadBytes(len);
                        sb.Append("a:[");
                        for (int j = 0; j < bytes.Length; j++)
                        {
                            if (j > 0)
                            {
                                sb.Append(" ");
                            }
                            sb.Append(bytes[j].ToString("x2"));
                        }
                        sb.Append("]");
                        break;

                    default:
                        throw new Exception($"Unknown/unsupported structure type: {structure[i]}");
                    }
                }

                if (packet.Readable > 0)
                {
                    byte[] extra = packet.ReadBytes(packet.Readable);
                    sb.Append(" [");
                    for (int i = 0; i < extra.Length; i++)
                    {
                        if (i > 0)
                        {
                            sb.Append(" ");
                        }
                        sb.Append(extra[i].ToString("x2"));
                    }
                    sb.Append("]");
                }
            }
            finally { packet.Position = originalPosition; }
        }