| |
| | | Сейчас работаю с WoWCore SandBox для версии 2.4.3.8606. Изучаю ваш исходный код и пишу свой, но на C++/CLI. У меня возникла проблема с сообщением SMSG_ACCOUNT_DATA_TIMES. Когда я отправляю это сообщение клиенту, он мне присылает CMSG_UPDATE_ACCOUNT_DATA что вызывает поломку в системе дешифровки заголовков (что примечательно поломка только в функции дешифровки). Если не отправлять SMSG_ACCOUNT_DATA_TIMES, то мой сервер и дальше удачно распознаёт все пакеты. Мой скайп: sawer_5 |
| | | | | неправильно парсите опкод? например неправильно определили содержимое (и размер) пакета и следующий пакет будет расшифрован уже неправильно. |
| | | | | Я не совсем понимаю, что вы хотели сказать в этом предложении: «неправильно парсите опкод?». Постараюсь развить вашу мысль: Насколько мне известно, заголовок пакетов от клиента имеет строгую структуру, а именно: Размер (2 байта) + Операционный код (4 байта). На этой аксиоме основан мой алгоритм считывание опкода: Начиная с третьего байта, я считываю целое число размером в 4 байта. Благодаря такому подходу мне удалось не только авторизовать клиента на сервере и загрузить список персонажей, но и войти в игровой мир, а также получить сообщение, написанное в чате и вывести его на консоль. Таким образом, я подвергаю сомнению вашу гипотезу о том, что я неправильно считываю операционный код присланный клиентом. Даже если я считываю этот операционный код неверно – это не должно ни в коем случае отразиться на последующих сообщениях присланных клиентом. Что касается содержимого и размера пакета: Я также хочу встать на сторону защиты SMSG_ACCOUNT_DATA_TIMES. Всё дело в том, что если бы формат и размер был бы неправильный, то и результатов работы этого пакета не должно было быть. А результат работы этого пакета есть. Результат заключается в том, что устанавливаются настройки управления в игре, что даёт возможность управления персонажем. Но всё же, в ваших словах есть доля истины. Фактом остаётся одно: После отправки сообщения SMSG_ACCOUNT_DATA_TIMES и получения CMSG_UPDATE_ACCOUNT_DATA все следующие получаемые заголовки пакетов от клиента не поддаются расшифровке и определению операционного кода. Это значит, что есть ошибка при отправке пакета (что не исключено) или при получении (что исключено). Также возможно, что необходимо обработать данные присланные клиентом в сообщении CMSG_UPDATE_ACCOUNT_DATA. Как и прежде мой скайп: sawer_5 и хотел бы с вами это всё дело обсудить. |
| | | | | Исправлено. Я увеличил размер буфера до 1024 * 3. |
| | | | | прошу прощения, был на конференции Delphi Tour в казани. только приехал. я собственно это и хотел сказать, разгребая пакет, нужно точно выйти на начало следующего. если промахнуться, то соответственно декодированные данные дают неправильный результат - неправильную длину и собственно сам опкод. это я и имел ввиду, когда говорил "неправильно парсите".
я честно говоря даже не подумал о том, что пакет у вас то и не весь прочитан :) я поэтому выделяю заведомо большие буферы для этих вещей. дальше в 3.х у вас появится ситуация еще веселее - трехбайтное значение длины, в зависимости от флага первого байта ;) там размер пакета со списком ачивок может достигать размера >32767. |
| |
|
| |