Steam Protocol C ++ Unzip Multi message

Я пишу плагин для протокола Steam на C ++. я использую https://github.com/seishun/SteamPP который использует protobufs из https://github.com/SteamRE/SteamKit и вообще это работает. Я могу общаться в Steam, я могу отправлять и получать отдельные сообщения (включая вход в систему) без проблем, но Steam часто отправляет несколько сообщений в одном сообщении (EMsg :: Multi из protobuf), и вот моя проблема. Я не могу распаковать их правильно. Я не могу понять, что я делаю не так.

std::string unzip(std::string &input) {
auto archive = archive_read_new();

auto result = archive_read_support_filter_all(archive);
assert(result == ARCHIVE_OK);

result = archive_read_support_format_zip(archive);
assert(result == ARCHIVE_OK);

result = archive_read_open_memory(archive, &input[0], input.size());
assert(result == ARCHIVE_OK);

archive_entry* entry;
result = archive_read_next_header(archive, &entry);
if (result != ARCHIVE_OK) {
return "read next header error " + std::to_string(result);
}
assert(result == ARCHIVE_OK);

std::string output;
output.resize(archive_entry_size(entry));

auto length = archive_read_data(archive, &output[0], output.size());
assert(length == output.size());
if (length != output.size()) {
return "hello world" + std::to_string(length);
}

assert(archive_read_next_header(archive, &entry) == ARCHIVE_EOF);

result = archive_read_free(archive);
assert(result == ARCHIVE_OK);

return output;
}

в этой функции (libarchive) archive_read_data возвращает -25, который является кодом ошибки, и ошибка следующего утверждения assert. Что случилось? Это хорошо работает в версии C # SteamKit, а также в версии node.js. Я пробовал также Crypto ++ Gunzip, но он вызывает исключение CryptoPP :: Gunzip :: HeaderErr.
ПРОВЕРИТЬ GIF отладки

0

Решение

Я думаю, что вам не хватает Zlib в вашем Libarchive, потому что сообщения Steam дефлированы и вам нужен Zlib для их обработки. Теперь libarchive не может их обработать, поэтому он возвращает -25 из-за неподдерживаемого типа файла. Попробуйте перекомпилировать libarchive с приложением Zlib в CMake.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]