我正在为C 中的Steam协议编写插件。我正在使用https://github.com/seishun/steampp,它使用https://github.com/steamre/steamkit中的Protobufs,通常可以正常工作。我可以传达Steam,可以在没有问题的情况下发送和接收单个消息(包括登录(,但是Steam通常很少发送一条消息(EMSG :: Multi from 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,这是错误代码,下一个断言会引发错误。怎么了?它在C#Steamkit版本以及Node.js版本中都很好。我也尝试过加密 gunzip,但它给cryptopp :: gunzip :: headererr异常。检查DEBUG GIF
我认为您在libarchive中缺少zlib,因为蒸汽消息被放气,并且您需要Zlib来处理它们。现在,libarchive无法处理它们,因此由于不支持的文件类型,它将返回-25。尝试使用CMAKE中的Zlib重新编译LIBARCHIVE。